我尝试执行动态linq group-by查询。第二个linq语句应该生成与第一个linq语句相同的结果 任何人都可以告诉我为什么第二个linq声明无法工作吗?
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("ProductName");
dt.Rows.Add("1", "aa", "TypeA");
dt.Rows.Add("2", "bb", "TypeA");
dt.Rows.Add("3", "cc", "TypeB");
第一个linq:
var lotSum = dt.AsEnumerable()
.GroupBy(x => new
{ id = x.Field<string>("id")
, product = x.Field<string>("ProductName"),
}
).ToList();
Second Linq //无法工作?
var gcol = new string[] { "ID", "ProductName" };
var gtype = dt.Rows[0].GetType();
var lotSum2 = dt.AsEnumerable()
.GroupBy(g => string.Join(",",
gcol.Select(c => gtype.GetProperty(c).GetValue(g, null)))).ToList();
答案 0 :(得分:0)
ID和ProductName不是DataRow的属性,它们是列的名称。您可以使用索引器访问它们... gcol.Select(c =&gt; g [c]),假设g是DataRow。