2012-01-26 70 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