如何使用“LINQ组”?

我使用Linq与Excel的多表单的Excel。 如何使用LINQ的组?

样本数据:

Name | Rate | Date | Code | ROW_SEQ A | 12 | 01/01/2015 | 12 | 1 B | 13 | 01/01/2015 | 12 | 2 Sub Total | 25 | 01/01/2015 | 12 | C | 10 | 01/01/2015 | 12 | 3 Grand Total | 35 | 01/01/2015 | 12 | D | 15 | 10/01/2015 | 15 | 1 E | 16 | 10/01/2015 | 15 | 2 Sub Total | 31 | 10/01/2015 | 15 | F | 10 | 10/01/2015 | 15 | 3 Grand Total | 41 | 10/01/2015 | 15 | 

C#代码:

 protected void btnExportExcel_Click(object sender, EventArgs e) { /*== How to use Group by LINQ? ==*/ DataSet dsTmp = new DataSet(); DataTable dtTmp = dtExport.Copy(); var grouped = from table in dtTmp.AsEnumerable() group table by new { date_Col = table["date"] , code_Col = table["code"] } into groupby select new { Value = groupby.Key, ColumnValues = groupby }; /*== How to use Group by LINQ? ==*/ foreach (var key in grouped) { dtTmp = new DataTable(); dtTmp = dtExport.Clone(); dtTmp.TableName = (key.Value.settle_date_Col + "-" + key.Value.bank_code_Col).Replace("00:00:00", "").Replace("/",""); foreach (var rw in key.ColumnValues) { dtTmp.ImportRow(rw); } dtTmp.AcceptChanges(); dsTmp.Tables.Add(dtTmp.Copy()); } dsTmp.AcceptChanges(); string fileName = string.Format("{0}_{1}.xls", this._ID, DateTime.Now.ToString("yyyyMMdd_HHmmss")); ExcelMultiSheet.ToExcel(dsTmp, fileName, Page.Response); } 

代码结果:

 Sheet1 Name | Rate | Date | Code | ROW_SEQ A | 12 | 01/01/2015 | 12 | 1 B | 13 | 01/01/2015 | 12 | 2 C | 10 | 01/01/2015 | 12 | 3 Sheet2 Name | Rate | Date | Code | ROW_SEQ Sub Total | 25 | 01/01/2015 | 12 | Grand Total | 35 | 01/01/2015 | 12 | Sheet3 Name | Rate | Date | Code | ROW_SEQ D | 15 | 10/01/2015 | 15 | 1 E | 16 | 10/01/2015 | 15 | 2 F | 10 | 10/01/2015 | 15 | 3 Sheet4 Name | Rate | Date | Code | ROW_SEQ Sub Total | 31 | 10/01/2015 | 15 | Grand Total | 41 | 10/01/2015 | 15 | 

但是我需要结果:

 Sheet1 Name | Rate | Date | Code | ROW_SEQ A | 12 | 01/01/2015 | 12 | 1 B | 13 | 01/01/2015 | 12 | 2 Sub Total | 25 | 01/01/2015 | 12 | C | 10 | 01/01/2015 | 12 | 3 Grand Total | 35 | 01/01/2015 | 12 | Sheet2 Name | Rate | Date | Code | ROW_SEQ D | 15 | 10/01/2015 | 15 | 1 E | 16 | 10/01/2015 | 15 | 2 Sub Total | 31 | 10/01/2015 | 15 | F | 10 | 10/01/2015 | 15 | 3 Grand Total | 41 | 10/01/2015 | 15 | 

感谢提前。 🙂

你可以这样使用

 var results = from p in persons group p.car by p.PersonId into g select new { PersonID = g.Key, Cars = g.ToList() };