【问题标题】:How to refer to a field in a dynamic linq query?如何在动态 linq 查询中引用字段?
【发布时间】:2010-08-12 09:11:38
【问题描述】:

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

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

我假设我必须使用 Field&lt;string&gt;("name") 之类的东西,但我想不通。我在几个论坛上看到过这个问题,但似乎没有人明确回答如何解决这个问题。

【问题讨论】:

    标签: c# dynamic-linq


    【解决方案1】:

    这是你想要做的吗?

    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() });
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解你想要什么,但这里有一些你可以用作灵感的小 sn-p 代码:

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 2011-03-28
        • 2021-09-19
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多