我对LINQ和foreach有疑问。
可以说我有一个带有三个表(ingredient
,recipe
和多对多关系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/