DataTable中的表结构是这样的:
ID Name ACount BCount CCount Date,Alarm其中:Alarm是布尔型,想得到如下结果:
Select ID,Name,Sum(ACount),Sum(BCount),Sum(CCount),Min(date),Alarm From Tbl
上面的结果中,只有被Group by的行中有一个Alram = true,结果集中就为True。请问LINQ怎么写?
ID Name ACount BCount CCount Date,Alarm其中:Alarm是布尔型,想得到如下结果:
Select ID,Name,Sum(ACount),Sum(BCount),Sum(CCount),Min(date),Alarm From Tbl
上面的结果中,只有被Group by的行中有一个Alram = true,结果集中就为True。请问LINQ怎么写?
LINQ操作的对象是DataTable
因该是LinQ TO DataSet 吧
.GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
.Select((g) => new { g.Key.ID, g.Key.Name, ACount = g.Sum((t) => (decimal)t["ACount"]), BCount = g.Sum((t) => (decimal)t["BCount"]), CCount = g.Sum((t) => (decimal)t["CCount"]), Date = g.Min((t) => (decimal)t["Date"]) });
dt.Rows.Cast<DataRow>()
.GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
.Select((g) => new { g.Key.ID, g.Key.Name, ACount = g.Sum((t) => (decimal)t["ACount"]), BCount = g.Sum((t) => (decimal)t["BCount"]), CCount = g.Sum((t) => (decimal)t["CCount"]), Date = g.Min((t) => (DateTime)t["Date"]) });
还有个Alarm字段呢
要求是:只有被Group by的行中有一个Alram = true,结果集中就为True。 另外,这么些最后的结果是一个匿名类型。我希望得到的结果是DataRow
应该怎么写呢?
.GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
.Select((g) =>
{
DataRow dr = permissionTable.NewRow();
dr["ID"] = g.Key.ID;
dr["Name"] = g.Key.Name;
dr["ACount"] = g.Sum((t) => (decimal)t["ACount"]);
dr["BCount"] = g.Sum((t) => (decimal)t["BCount"]);
dr["CCount"] = g.Sum((t) => (decimal)t["CCount"]);
dr["Date"] = g.Min((t) => (DateTime)t["Date"]);
dr["Alarm"] = g.Key.Alarm;
return dr;
});