2012-01-12 3 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-to-SQL? 엔티티 프레임 워크? DbLinq? ADO.NET 데이터 서비스? 다른 것? –

+0

연결이 끊긴 개체가있는 일반 LINQ 형식의 매일. 특별한 것은 없지만 DB 공급자를 사용하지 않습니다. –

+0

ah, k; "db"접두사에 의해 던졌습니다. LINQ-to-Objects는 상당히 수용해야합니다. 그렇다면 –

답변

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 r in g.OrderBy (x => x.DisplayOrder))' – Jay

+0

이어야합니다. @Jay는 감독을 지적 해 주셔서 감사합니다. foreach 루프가 아닌 첫 번째 쿼리에서이를 수정했습니다. OP가 여러 쿼리를 피할 필요가있는 것처럼 보였기 때문입니다. – phoog

+0

우수 답변! 나는 그것이'r.Title' 대신'r.Recipe.Title'라고 믿습니다. 당신의 대답을 수정했습니다. –

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' 대신에 사용한다고 생각한다. –

+0

나는'OrderBy (g => g.Key.GroupOrder);'- 나머지는 작동하는 것처럼 보인다. –

관련 문제