2017-06-25 3 views
0

私は2つのテーブルを「ユーザー」と「サブスクリプション」と呼んでいます。これらのコントローラを使用してすべてのユーザーデータを取得できますが、Subscriptionステータスが1のサブスクリプション列の「ステータス」のユーザーデータのみを取得します。私の結果をフィルタリングするにはどうすればよいですかリレーションによるデータフィルタ

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Net; 
using System.Web; 
using System.Web.Mvc; 
using WebApplication2.Models; 

namespace WebApplication2.Controllers 
{ 
    public class EmailCampaignController : Controller 
    { 
     private db_likEntities db = new db_likEntities(); 


     // GET: Only Subscribed Users info 
     public ActionResult Index() 
     { 
      var users = db.Users.Include(u => u.Countries); 
      return View(users.ToList()); 
     } 

    } 
} 
+0

どのようにユーザーとサブスクリプションテーブルが関連していますか? –

+0

ユーザーの外部キーをサブスクリプション列= "UserId"に保存して、その関係を確認しました –

+0

ユーザークラスにサブスクリプションプロパティがありますか?ユーザーansサブスクリプションクラスを共有できますか? –

答えて

1

この編集を試してください。あなたのユーザテーブルにstatusというカラムがあることを願ってください。

public class EmailCampaignController : Controller 
{ 
    private db_likEntities db = new db_likEntities(); 


    // GET: Only Subscribed Users info 
    public ActionResult Index() 
    { 
     //first get all subscriptions whose status is 1 
    var trueSubscriptions = db.Subscriptions.Where(s => s.status == 1).ToList(); 

    //use this variable to filter users by Id 
    List<User> users = new List<User>(); 

    var allUsers = db.Users.Include(u => u.Countries); 

    for (int i = 0; i < trueSubscriptions; i++) 
    { 
     users.Add(allUsers.FirstOrDefault(x => x.Id == trueSubscriptions[i].UserId)); 
    } 


    return View(users.ToList()); 
    } 

} 

これを実現するための簡単な方法として、このようなモデルを編集する必要があります。

モデルこのアプローチで

public class User 
{ 
    public int id{get;set;} 
    public virtual Subscription subscription{get;set;} 
} 

public class Subscription 
{ 
    public int id{get;set;} 
    public bool status{get;set;} 
    public int UserId{get;set;} 
} 

、あなたは、単にこのようなあなたの加入ユーザを取得します。

`var users = db.Users.Include(u => u.Countries) 
         .Where(u => u.subscription.status == true) 
         .ToList(); 

    return View(users);` 
+0

これはバックエンドで仕事をするシンプルでストレートな解決策です。 –

+0

Broは、 "Subscription"テーブルの "Users"& "Subscription"と "Status"カラムという2つの異なるテーブルを持っています。とった?だから、私は "サブスクリプション"にアクセスして考える必要があります。アイデアがありますか? –

+0

次に、SubscriptonsテーブルのUsersテーブルの外部キーも持っていると思いますか?もしそうなら、私はこの答えを編集できるように教えてください。 – devTimmy

関連する問題