我对LINQ和foreach有疑问。

可以说我有一个带有三个表(ingredientrecipe和多对多关系ingredientinrecipe)的简单数据库。它们都具有id和name的简单结构。

我正在运行一个控制台应用程序,例如,用户可以输入两个ingredients

egg, flour


我将如何构造LINQ子句以遍历所有将包含在内的所有配方。

我正在使用UOW将所有内容组合在一起,所以我可以做uow.Ingridients.All ...等

我认为我需要从ingridientinrecipe表中进行处理。

将会是以下内容:

var recipes = uow.ingridientinrecipe.All.Where(a => a.Ingridient.IngridientName.Contains( ...


但这只有当用户输入一种成分时才有效。我将如何扩展它以使用两个无限输入。

我添加到目前为止的工作。

var line = Console.ReadLine();
while (line.ToLower().Trim() != "exit")
{
    var ingridients= line.Split(',');
    Console.WriteLine("\nAre you looking for following receipes:");
    foreach (var ingridient in ingridients)
    {
        var recipes= _uow.IngridientInRecipe.All.Where(a => a.Ingridient.IngridientName.Contains(ingridient)).ToList();
        foreach (var recipe in recipes)
        {
            Console.WriteLine(recipe.Recipes.RecipeName);
        }
        Console.WriteLine();
        line = Console.ReadLine();
}


询问的表结构

public class Recipe
{
    public int RecipeId{ get; set; }

    public string RecipeName{ get; set; }

    public virtual List<IngridientInRecipe> IngridientInRecipe{ get; set; }
}


public class Symptom
{
    public int IngridientId{ get; set; }
    public string IngridientName{ get; set; }

    public virtual List<IngridientInRecipe> IngridientInRecipe{ get; set; }

}

public class IngridientInRecipe
{

    public int IngridientInRecipeId{ get; set; }

    public int RecipeId{ get; set; }
    public virtual Recipe Recipe{ get; set; }

    public int IngridientId{ get; set; }
    public virtual Ingridient Ingridient{ get; set; }
}

最佳答案

您可以使用Intersect

var line = Console.ReadLine();
while (line.ToLower().Trim() != "exit")
{
    var ingridients = line.Split(',');
    Console.WriteLine("\nAre you looking for following receipes:");
    var recipes = _uow.IngridientInRecipe.All;
    foreach (var ingridient in ingridients)
    {
        recipes = recipes.Intersect(_uow.IngridientInRecipe.All.Where(a => a.Ingridient.IngridientName.Contains(ingridient)));
    }
    foreach (var recipe in recipes.ToList())
    {
        Console.WriteLine(recipe.Recipes.RecipeName);
    }
    Console.WriteLine();
    line = Console.ReadLine();
}

关于c# - LINQ语句获取包含配方 list 的每个配方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37972208/

10-09 06:43