有没有办法将两个LINQ查询合并为一个

本文关键字:合并 查询 一个 LINQ 两个 有没有 | 更新日期: 2023-09-27 18:20:08

我有一个名为dbRecipes的数组,其中包含一个按组划分的食谱列表。例如,晚餐组可能会有填充三文鱼、沙拉和土豆泥。甜点组会有一个巧克力熔岩蛋糕。嗯。

我需要在分组列表中显示这些食谱,例如:

Group 1:
  - Recipe 1
  - Recipe 2
Group 2:
  - Recipe 3

dbRecipes中的每个项目都包含一个Group属性,其中包含关于它所在组的信息,以及一个Recipe属性,其中包括关于配方的信息。

我想使用LINQ查询来遍历整个过程,但我远非LINQ专家,所以我找到的最好方法是查询所有不同的组,然后遍历其中的每个组。这是我的代码:

var groups = (from g in dbRecipes orderby g.Group.GroupOrder select g.Group).Distinct();
foreach (var g in groups)
{
   output.Write("{0}<br/>", g.GroupName);
   var recipes = (from r in dbRecipes where r.Group == g orderby r.DisplayOrder select r.Recipe);
   foreach(var r in recipes)
   {
      output.Write("---{0}<br/>", r.Title);
   }
}

这似乎运行得很好,但有没有一种方法可以做到这一点,也许更高效、更干净,或者不需要多个查询?谢谢

有没有办法将两个LINQ查询合并为一个

var groups = 
    from r in dbRecipes
    orderby r.DisplayOrder
    group r by r.Group into g
    orderby g.Key.GroupOrder
    select g;
foreach (var g in groups) 
{ 
   output.Write("{0}<br/>", g.Key.GroupName); 
   foreach(var r in g) 
   { 
      output.Write("---{0}<br/>", r.Recipe.Title); 
   } 
} 

未测试,但这里有一个使用GroupBy:的改编

var groups = dbRecipes.GroupBy(r => r.Group).OrderBy(g => g.Key.GroupOrder);
foreach(var recipeGroup in groups)
{
    output.Write("{0}<br/>", recipeGroup.Key.GroupName);
    foreach(var recipe in recipeGroup.OrderBy(r => r.DisplayOrder))
    {
        output.Write("---{0}<br/>", recipe.Recipe.Title);
    }
}