0

我尝试执行动态 linq 分组查询。第二个 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();

第二个 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();
4

1 回答 1

0

ID 和 ProductName 不是DataRow的属性,它们是列的名称。您可以使用索引器访问它们... gcol.Select(c=>g[c]),假设 g 是 DataRow。

于 2013-04-15T15:38:11.087 回答