在Linq分组(在多个领域)

我使用linq对一些数据进行分组如下:

var groupedData = from row in salesTable.AsEnumerable() group row by row.Field("InvoiceNum") into grp select grp; 

我想使用row.Field(“InvoiceNum”),row.Field(“InvoiceLineNum”)等一些字段重新组合groupsData ,我不知道linq分组如何与多个字段一起工作?

使用匿名类型对象进行分组。

  var groupedData = from row in salesTable.AsEnumerable() group row by new { InvoiceNum = row.Field("InvoiceNum"), InvoiceLineNum = row.Field("InvoiceLineNum") } into grp select grp; 

或使用命名类

 public class InvoiceGrouping : IEquatable { public string InvoiceNum { get; set; } public string InvoiceLineNum { get; set; } public bool Equals( InvoiceGrouping other ) { return other != null && this.InvoiceNum == other.InvoiceNum && this.InvoiceLineNum == other.InvoiceLineNum; } public override bool Equals( object other ) { return Equals( other as InvoiceGrouping ); } public override int GetHashCode() { unchecked { int hash = 17; hash *= (this.InvoiceNum != null ? 23 + this.InvoiceNum.GetHashCode() : 1); hash *= (this.InvoiceLineNum != null ? 23 + this.InvoiceLineNum.GetHashCode() : 1 ); return hash; } } } var groupedData = from row in salesTable.AsEnumerable() group row by new InvoiceGrouping { InvoiceNum = row.Field("InvoiceNum"), InvoiceLineNum = row.Field("InvoiceLineNum") } into grp select grp;