Linq集团的声明

时间:2013-04-15 15:33:31

标签: c# linq

我尝试执行动态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();

1 个答案:

答案 0 :(得分:0)

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