使用lambda按多列分组

如何使用lambda进行多列分组?

我看到了如何使用linq来实体的例子,但是我正在寻找lambda表单。

var query = source.GroupBy(x => new { x.Column1, x.Column2 }); 

如果你的桌子是这样的

 rowId col1 col2 col3 col4 1 ae 12 2 2 bf 42 5 3 ae 32 2 4 bf 44 5 var grouped = myTable.AsEnumerable().GroupBy(r=> new {pp1 = r.Field<int>("col1"), pp2 = r.Field<int>("col2")}); 

除了上面的答案 – 如果你需要通过键来过滤这些组,你可以定义一个类来包装许多键。

 return customers.GroupBy(a => new CustomerGroupingKey(a.Country, a.Gender)) .Where(a => a.Key.Country == "Ireland" && a.Key.Gender == "M") .SelectMany(a => a) .ToList(); 

CustomerGroupingKey采用组密钥:

  private class CustomerGroupingKey { public CustomerGroupingKey(string country, string gender) { Country = country; Gender = gender; } public string Country { get; } public string Gender { get; } } 
  class Element { public string Company; public string TypeOfInvestment; public decimal Worth; } class Program { static void Main(string[] args) { List<Element> elements = new List<Element>() { new Element { Company = "JPMORGAN CHASE",TypeOfInvestment = "Stocks", Worth = 96983 }, new Element { Company = "AMER TOWER CORP",TypeOfInvestment = "Securities", Worth = 17141 }, new Element { Company = "ORACLE CORP",TypeOfInvestment = "Assets", Worth = 59372 }, new Element { Company = "PEPSICO INC",TypeOfInvestment = "Assets", Worth = 26516 }, new Element { Company = "PROCTER & GAMBL",TypeOfInvestment = "Stocks", Worth = 387050 }, new Element { Company = "QUASLCOMM INC",TypeOfInvestment = "Bonds", Worth = 196811 }, new Element { Company = "UTD TECHS CORP",TypeOfInvestment = "Bonds", Worth = 257429 }, new Element { Company = "WELLS FARGO-NEW",TypeOfInvestment = "Bank Account", Worth = 106600 }, new Element { Company = "FEDEX CORP",TypeOfInvestment = "Stocks", Worth = 103955 }, new Element { Company = "CVS CAREMARK CP",TypeOfInvestment = "Securities", Worth = 171048 }, }; //Group by on multiple column in LINQ (Query Method) var query = from e in elements group e by new{e.TypeOfInvestment,e.Company} into eg select new {eg.Key.TypeOfInvestment, eg.Key.Company, Points = eg.Sum(rl => rl.Worth)}; foreach (var item in query) { Console.WriteLine(item.TypeOfInvestment.PadRight(20) + " " + item.Points.ToString()); } //Group by on multiple column in LINQ (Lambda Method) var CompanyDetails =elements.GroupBy(s => new { s.Company, s.TypeOfInvestment}) .Select(g => new { company = g.Key.Company, TypeOfInvestment = g.Key.TypeOfInvestment, Balance = g.Sum(x => Math.Round(Convert.ToDecimal(x.Worth), 2)), } ); foreach (var item in CompanyDetails) { Console.WriteLine(item.TypeOfInvestment.PadRight(20) + " " + item.Balance.ToString()); } Console.ReadLine(); } }