2010-03-10 14 views
0
var expr = Data.Customers 
     .GroupBy(c => c.Country, c => c.Name); 

    foreach (IGrouping<Countries, string> customerGroup in expr) 
    {     
     Trace.WriteLine("Country: " + customerGroup.Key); 
     foreach (var item in customerGroup) 
     { 
      Trace.WriteLine(item); 
     } 
     Trace.WriteLine(""); 
    } 

我希望我得到以下結果:的GroupBy由許多不同的鍵

國家:意大利

保羅 馬爾科

國家:美國

詹姆斯 弗蘭克

代替:

國家:意大利 保羅 馬爾科

國家:美國 詹姆斯 弗蘭克 弗蘭克

如果可能的話,請使用標準的LINQ語法使它。

+2

您還沒有指定輸入數據,或者這與「許多不同的鍵」有什麼關係。 –

+0

看看[這個例子](http://www.arpitkhandelwal.com/2011/12/c-linq-to-objects-using-groupby-with.html),如果它適合你 –

回答

7

需要組你必須使用匿名類型:

var expr = Data.Customers 
      .GroupBy(c =>new{c.Country, c.Name}); 

然後您可以訪問expr.Key.Countryexpr.Key.Name

+0

花了我4個小時找到一個簡單的解釋 - 謝謝 – Chev

0

乍一看,我覺得你如果想通過多鍵羣不按名稱

var expr = Data.Customers 
     .GroupBy(c => c.Country); 
+0

A也需要組按名稱順序 –

0
var expr = Data.Customers 
        .Select(c => new { c.Country, c.Name}) 
        .Distinct() 
        .GroupBy(c => c.Country, c => c.Name); 

我發現了一個笨拙的解決方案,但沒有使用LINQ語法。

+0

我不明白你想達到什麼目的。這個查詢確實沒有意義(或者我沒有看到它)。將一個元素分組爲一組的目的是什麼? –

+0

我已經達到了結果。我跳槽,通過GroupBy運營商按名稱過濾客戶,因爲我不想有像Frank這樣的幾個類似名稱,然後我想根據他們的國家對客戶進行分組。 –

+0

如果有人告訴我如何使用LINQ語法實現相同的結果,我會很高興。 –