linq To DataTable 实现Group by 多个栏位
protected void LoadRoutingData2(DataTable dt)
{
//linq to DataTable 实现group by 多个栏位
var t = dt.AsEnumerable().GroupBy(x => new { ManagerID = x.Field<string>("ManagerID"), Reviewer_1_ID = x.Field<string>("Reviewer_1_ID"),
Reviewer_2_ID = x.Field<string>("Reviewer_2_ID"), SystemAdmin = x.Field<string>("System Admin")});
string list2Text = "";
int rowNo = 1;
string trFormat = @"<tr class='trData {9}' tag='{0}'><td>{10}</td><td>{1} </td><td>{2} </td><td>{3} </td><td>{4} </td><td>{5} </td><td>{6} </td><td>{7} </td><td>{8} </td></tr>";
foreach (var a in t)
{
string reviewer_1_id = a.Key.Reviewer_1_ID;
string reviewer_2_id = a.Key.Reviewer_2_ID;
string managerID = a.Key.ManagerID;
string sysadmin = a.Key.SystemAdmin;
list2Text += string.Format("<tr mainTag='{0}' class='trRouting'><td colspan='9'>{1} -> {2} -> {3} -> {4}</td></tr>",
rowNo,
managerID, reviewer_1_id, reviewer_2_id, sysadmin);
int drDataNO = 0;
foreach (DataRow drData in a)
{
var trStyle = "gdTr1";
if (drDataNO % 2 != 0)
{
trStyle = "gdTr2";
}
drDataNO++;
list2Text += string.Format(trFormat, rowNo,
drData["ApplicationName"].ToString(), drData["UserID"].ToString(), drData["Name"].ToString(), drData["Mail"].ToString(),
drData["Department"].ToString(), drData["Access Data"].ToString(), drData["Appeove"].ToString(), drData["Remark"].ToString(),
trStyle, drDataNO);
}
rowNo++;
}
ltrGroupList2.Text = string.Format(@"<table CellPadding='0' CellSpacing='0' class='myGd' style='width:100%'>
<tr class='gdHeader'><th>RowNo</th><th>ApplicationName</th><th>UserID</th><th>Name</th><th>Mail</th><th>Department</th><th>Access Data</th><th>Appeove</th><th>Remark</th></tr>
{0}
</table>", list2Text);
}