嵌套连接查询的Linq语法

时间:2014-12-19 00:32:34

标签: c# linq entity-framework

所以前提是我有一个叫食谱的表,每个食谱都有成分。我想建立一个购物清单。

目前我正在做的是: -

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中必须有一个简短的方法来做到这一点,即获得用于所有选定食谱的所有成分的列表。

另请注意

Recipesrecipe类型的列表 类型recipe具有属性成分,它是使用中间多对多连接表连接到成分表(由EF计算为.ingedients

2 个答案:

答案 0 :(得分:3)

因此,您正试图从食谱中获取一系列独特成分。

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

答案 1 :(得分: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();
     }

请试试这个