2012-01-26 68 views
1

我的問題是相同的兩個以前提出的問題LINQ到數據集集團通過多列 - 方法語法

LINQ TO DataSet: Multiple group by on a data table,這個問題唯一的區別是,我需要做的是與方法語法。

LINQ Group By Multiple fields -Syntax help - 這個問題的區別在於我需要使用LINQ-to-DataSet來做到這一點。

我被國家試圖組客戶,其結果(預計)如下:

COUNTRYCODE  CUSTOMERNAME 
    USA    Microsoft 
    USA    IBM 
    CAN    RIM 
    CAN    Tim Horton 
    GER    BMW 

我們如何做到這一點?謝謝。

編輯:

這是我正在努力的凌亂的代碼。

var query = orders.AsEnumerable() 
        .GroupBy(t => new {CountryCode= t.Field<string>("CountryCode"), 
             CustomerName = t.Field<string>("CustomerName"), 
            (key, group)=> new {Key1 = key.CountryCode, Key2=key.CustomerName}) 
        .Select(t => new {t.Key1, t.Key2}); 
+1

你是什麼意思與「用結果(預期)如下「?結果不按國家分組。 – 2012-01-26 23:27:42

+0

我應該說,「按(國家+客戶)分組」對不起。 – FMFF 2012-01-26 23:30:49

+0

你已經有了一個Linq to DataSet的例子,以及擴展方法語法的例子。你只需要將它們結合起來......你還需要什麼? – 2012-01-26 23:31:05

回答

0

在我編輯的代碼工作:

var query = orders.AsEnumerable() 
       .GroupBy(t => new {CountryCode= t.Field<string>("CountryCode"), 
           CustomerName=t.Field<string>("CustomerName"), 
          (key, group)=> new {CountryCode = key.CountryCode,CustomerName=key.CustomerName}) 
.Select(t => new {t.CountryCode, t.CustomerName}); 
1
var uniqueCountryCustomer = 
     tblCustomer.AsEnumerable() 
     .GroupBy(row => new 
     { 
      Country = (string)row["COUNTRYCODE"], 
      Customer = (string)row["CUSTOMERNAME"] 
     }); 

爲了完整起見,這裏是查詢語法:

var uniqueCountryCustomer = 
      from row in tblCustomer.AsEnumerable() 
      group row by new{ 
       Country=(string)row["COUNTRYCODE"], 
       Customer=(string)row["CUSTOMERNAME"] 
      }; 

// display result 
var summary = from cc in uniqueCountryCustomer 
       select string.Format("Country:{0} Customer:{1} Count:{2}", 
       cc.Key.Country, 
       cc.Key.Customer, 
       cc.Count()); 
MessageBox.Show(string.Join(Environment.NewLine,summary)); 
+1

順便說一句,OP特別要求的方法語法,而不是查詢理解語法... – 2012-01-26 23:42:41

+0

@Thomas:我讀過方法的語法,但理解查詢,對不起。刪除了「成組」。通常在VB.NET中編碼,所以這是我的C#培訓的附帶損害;) – 2012-01-26 23:45:57