2017-12-14 10 views
1

製品のリレーショナル照合データから部分的にリストを返したいと思っていました。私はあなたの関係の状態についてのアイデアを得るedmxファイルの画像を添付しました!問題はどのように私はこのクエリを書くことができないか、それを行うために任意の反復プロセスが必要なのか分かりません。主な目標は、現在のユーザーがブックマークしたすべての製品を取得することです。質問は大歓迎です。事前のおかげであなたはProductIdProductIdsのあなたのコレクションにある製品を返すように.Containsステートメントを使用することができますリレーショナルデータリストを部分ビューに戻す

Picture1

[ChildActionOnly] 
     [Authorize] 
     public PartialViewResult _UserBookmark(string id) 
     { 
      using (mydb db = new mydb()) 
      { 
       int userId = db.Users.Where(x => x.Email == id).FirstOrDefault().UserId;//here i am getting user primary key id 
       var ProductIds = db.Bookmarks.Where(x => x.UserId == userId).ToList();//here i am getting all Product primary keys under that user 
       var ListOfProducts = db.Products.Where(x=>x.ProductId == "i dont know how to do it") // here i wanted to return matched all products 
       return PartialView("_UserBookmark",ListOfProducts); 
      } 

     } 
+0

'IEnmerable ListOfProducts = db.Products.Where(x => ProductIds.Contains(x.ProductId))'、しかし、IEnumerable ProductIds = db.Bookmarks.Where(x => x)を使用する必要があります。 UserId == userId).Select(x => x.ProductId); ' –

+0

が機能します!プラッツ答え。投票の危険なしに答えるのは安全な方法ですか? –

+0

あなたの質問は多少曖昧で、返品したいものは何も記載されていません(たとえば、現在のユーザーがブックマークした商品をすべて手に入れたい_など)。質問を編集すると、回答が追加されます –

答えて

1

。結果は、現在のユーザーのためのものである場合

変更

[ChildActionOnly] 
[Authorize] 
public PartialViewResult _UserBookmark(string id) 
{ 
    using (mydb db = new mydb()) 
    { 
     int userId = db.Users.Where(x => x.Email == id).FirstOrDefault().UserId; 
     // Get a collection of the ProductId's 
     IEnumerable<int> ProductIds = db.Bookmarks 
      .Where(x => x.UserId == userId).Select(x => x.ProductId); 
     IEnumerable<Product> ListOfProducts = db.Products 
      .Where(x => ProductIds.Contains(x.ProductId)) 
     return PartialView("_UserBookmark", ListOfProducts); 
    } 
} 

ノートに方法は、それからだけではなくメソッドにそのEmailを渡すという方法で、現在のユーザーを得ることを考慮します。また、.FirstOrDefault().UserIdは、Usernullであるメソッドに不正な値を渡した場合に例外をスローすることにも注意してください。

関連する問題