2014-12-19 108 views
2

所以前提是我有一个名为recipes的表,每个食谱都有成分。我想建立一个购物清单。嵌套连接查询的Linq语法

目前我在做什么是: -

List<ingredient> UsedIngredients = new List<ingredient>(); 

foreach (var item in this.Recipes) 
{ 
    foreach (var ingredient in item.ingredients) 
    { 
     if (!UsedIngredients .Contains(ingredient)) 
     { 
      UsedIngredients .Add(ingredient); 
     } 
    } 
} 

我知道我可以简化它归结为

List<ingredient> UsedIngredients = new List<ingredient>(); 

foreach (var item in this.Recipes) 
{ 
    foreach (var ingredient in item.ingredients.Where(ingredient => !UsedIngredients .Contains(ingredient))) 
    { 
     UsedIngredients.Add(ingredient); 
    } 
} 

很简单,但我想一定有短手的方法在linq中执行此操作,即获取用于所有选定食谱的所有成分的列表。

同时请注意,

Recipes的类型为recipe recipe类型的列表有一个属性成分,其是使用中间许多一对多连接表(由EF来分解走了加入到成分表只是.ingedients

回答

3

所以你试图从食谱得到一个独特的成分集合。

var usedIngredients = 
    (from recipe in this.Recipes 
    from ingredient in recipe.ingredients 
    select ingredient).Distinct().ToList(); 
+0

谢谢!我甚至不知道你可以在一个linq查询中使用两个命令 - 这使得其他一些事情也变得更加容易;) – 2014-12-19 00:50:44

0
 public void Test() 
    { 
     List<Recipes> recipes = new List<Recipes>(); 
     List<Ingredient> UsedIngredients = new List<Ingredient>(); 
     UsedIngredients = (from a in recipes where UsedIngredients.Contains(a.ingredient) select a.ingredient).ToList(); 
    } 

请试试这个