2016-04-11 14 views
2

ProductとCategoryGroup間に多対多のデー​​タ関係があり、(productListの開始点から)すべてのProductsを選択しています。特定のCategoryGroups(CategoryGroupのIdのリストはgroupIdsで指定されています)。多対多データ関係のLINQ式をLINQラムダに変換する

var productList = db.Products 
    .Where(a => a.ThisCondition == thisCondition) 
    .ToList(); 

var groupIds = db.CategoryGroups 
    .Where(a => a.ThatCondition == thatCondition) 
    .Select(a => a.CategoryGroupId) 
    .ToList(); 

は1つのLINQラムダ式でproductList LINQ式を交換することが可能です:どこ

productList = 
    from p in productList 
    where (
    from g in p.CategoryGroup 
    where groupIds.Contains(g.CategoryGroupId) 
    select g 
    ).Any() 
    select p; 

は、これは成功し、次のLINQの式を使用して達成することができますか?

ご迷惑をおかけして申し訳ございません。あなたはこのtutorialのように2つのコレクションナビゲーションプロパティを使用して、多くの関係に、あなたの多くを表現している場合は

答えて

3

、あなたはこれにクエリを簡素化することができます:

var productList = db.Products 
        .Where(a => a.ThisCondition == thisCondition 
           && a.CategoryGroups.Count(c=>groupIds.Contains(c.CategoryGroupId))>0); 

それとももAny拡張メソッドを使用できます

var productList = db.Products 
        .Where(a => a.ThisCondition == thisCondition 
           && a.CategoryGroups.Any(c=>groupIds.Contains(c.CategoryGroupId))); 
+0

それは素晴らしいです、ありがとう - 両方の仕事。とても有難い。 – RickL

+0

あなたを歓迎してくれてうれしいです;) – octavioccl

関連する問題