2012-01-12 112 views
4

我有一个名为dbRecipes的数组,其中包含分为组的菜谱列表。例如,晚餐组可能有三文鱼馅,沙拉和土豆泥。甜品小组会有一个巧克力融化的熔岩蛋糕。嗯。有没有办法将两个LINQ查询合并为一个?

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

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); 
    } 
} 

这似乎是工作得相当好,但有没有办法做到这一点,也许是更高效,更清洁,或不需要多个查询?谢谢!

+0

这可能是答案在这里需要提供的知识;你能清楚地知道这是哪种LINQ吗? LINQ到SQL?实体框架?的DBLinq? ADO.NET数据服务?别的东西? – 2012-01-12 07:05:35

+0

Plain ol'每天LINQ与断开的对象形成。没什么特别的,我没有使用任何DB提供程序。 – 2012-01-12 07:21:33

+0

ah,k;被“db”前缀抛出; LINQ到对象应该是相当宽松的,然后 – 2012-01-12 07:22:43

回答

3
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); 
    } 
} 
+0

'foreach(var r in g)'应该是'foreach(var in g.OrderBy(x => x.DisplayOrder))' – Jay 2012-01-12 07:16:46

+0

@Jay感谢您指出疏忽。我在第一个查询中而不是在foreach循环中纠正了它,因为这似乎更符合OP避免多个查询的要求。 – phoog 2012-01-12 07:19:25

+0

优秀的答案!虽然我相信它是'r.Recipe.Title'而不是'r.Title' - 我修改了你的答案。 – 2012-01-12 07:26:14

2

未经检验的,但在这里使用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); 
    } 
} 
+0

我想你的意思是'recipe.Recipe.Title'而不是'r.Title' – 2012-01-12 07:30:31

+0

我认为你的意思是:'OrderBy(g => g.Key.GroupOrder);' - 其余的似乎工作,谢谢! – 2012-01-12 07:32:20

相关问题