【发布时间】:2014-12-26 20:19:56
【问题描述】:
我正在开发应用程序,用户可以在该应用程序中选择他/她想在屏幕上看到的列以及要分组或聚合的列。因此,在我的 LINQ 部分中,我实际上应该将包含列名的变量传递给 group by 和 aggregate 子句。请记住,DataTable dt 可能每次都保存不同的数据(例如员工信息、采购订单、绩效统计等)。我只能通过dt.Columns[i].ColumnName 和dt.Columns[i].DataType.Name 在运行时获取有关数据的信息。任何人都可以建议如何做到这一点,我需要的是这样的:
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
var query = from row in dt.AsEnumerable()
group row by new
{
foreach(DataColumn column in dt.Columns)
{
row[column.ColumnName];
}
} into grp
select new
{
foreach(DataColumn column in dt.Columns)
{
if(column.DataType.Name == "Decimal")
{
Sum(grp[column.ColumnName]);
}else{
grp[column.ColumnName];
}
}
};
【问题讨论】:
-
hatchet 感谢您的尝试,但我不知道编码时的列名和列数,它总是在变化并且仅在运行时可用。我只能在填充后从 DataTable 中获取列名,但正如刚才提到的,它每次都可以填充不同的数据(这意味着它可能一次是产品数据,另一次是员工信息)。
-
不走运,它仍然需要在编码时知道列名,这是未知的。
标签: c# linq group-by aggregate dynamic-linq