2010-08-12 49 views
0

我有一个需要动态的查询,我认为我的大部分语法是正确的,但我不知道如何给它我想分组的列的名称。我已经尝试了几种不同的方法,我总是得到一个错误 - “无属性或字段‘名称’存在型‘数据行’如何引用动态linq查询中的字段?

IQueryable<Result> aggregate1 = 
     query1Data.Tables[0].AsEnumerable().AsQueryable() 
       .GroupBy("name", "it") 
       .Select<Result>("new(Key as Group, Sum(value)as Total)"); 

我想我不得不使用一些像Field<string>("name"),但我不能弄明白我看到的几个论坛的问题,但似乎没有人有一个明确的答案如何解决这个问题。

回答

0

这就是你想干什么?

var aggregate1 = 
     query1Data.Tables[0].AsEnumerable().AsQueryable() 
      .GroupBy(row => row.Field<string>("name"), row => row.Field<int>("it")) 
      .Select(g => new { Group = g.Key, Total = g.Sum() }); 
0

我不是当然,我确切地知道你想要什么,但这里有一小段你可能会用到的代码灵感:

var dataTable = new DataTable(); 
dataTable.Columns.Add("Name", typeof(String)); 
dataTable.Columns.Add("Value", typeof(Int32)); 
dataTable.Rows.Add("A", 1); 
dataTable.Rows.Add("A", 2); 
dataTable.Rows.Add("B", 3); 
dataTable.Rows.Add("B", 4); 

var aggregate = dataTable.AsEnumerable() 
    .GroupBy(row => row.Field<String>("Name"), row => dataRow.Field<Int32>("Value")) 
    .Select(group => new { Name = group.Key, Total = group.Sum() }); 

foreach (var row in aggregate) 
    Console.WriteLine(row.Name + " = " + row.Total);