0

我有一个需要动态的查询,我认为我的大部分语法都是正确的,但我不知道如何给它我想要分组的列的名称。我尝试了几种不同的方法,但总是收到错误消息 - “'datarow' 类型中不存在属性或字段 'name'

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

我想我必须使用类似的东西,Field<string>("name")但我无法弄清楚。我在几个论坛上看到过这个问题,但似乎没有人明确回答如何解决这个问题。

4

2 回答 2

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() });
于 2010-08-12T09:46:46.443 回答
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);
于 2010-08-12T09:47:44.823 回答