【问题标题】:How can I access the result of dynamic linq with dynamic key/value pairs of IEnumerable?如何使用 IEnumerable 的动态键/值对访问动态 linq 的结果?
【发布时间】:2013-10-22 09:13:45
【问题描述】:

我有一个动态 Linq 查询,我试图通过它访问分组数据,分组在两列和 1 列上,其中使用了聚合函数。

 var gFieldList = new List<string>() { "Supplier", "Country" };
    var sFieldList = new List<string>() { "Sales"};

     var gField = string.Join(", ", gFieldList.Select(x => "it[\"" + x + "\"] as " + x));
     var sField = string.Join(", ", sFieldList.Select(y => "Sum(Convert.ToDouble(it[\""+y+"\"])) as "+y));


         var dQueryResult = dataTable
                        .AsEnumerable()
                        .AsQueryable()
                        .GroupBy("new("+gField+")", "it")
                        .Select("new("+sField+",it.Key as Key, it as Data)");

使用以下代码从 dQueryResult 访问数据。

var groupedData = (from dynamic dat in dQueryResult select dat).ToList();

                foreach (var group in groupedData)
                {
                    var key = group.Key;
                    var sum = group.Sales;
                     MessageBox.Show("Supplier : " + key.Supplier + "Country : " + key.Country + " SALES : "+Sale.ToString());


                }

问题是

var gFieldList = new List<string>() { "Supplier", "Country" };
var sFieldList = new List<string>() { "Sales"};

不断变化。它们都需要是动态的,这将不允许我从上述代码中动态访问值,因为现在它被编码为 key.Supplier、key.Country 和 group.Sales。

如何使动态查询结果的迭代成为动态的?

我尝试过使用

    var groupedData = (from dynamic dat in dQueryResult select dat).ToList();

  foreach (var group in groupedData)
  {
                    var key = group.Key;
                    var sum = group.Sales;
           foreach (var v in gFieldList)
           {
                  MessageBox.Show(key.v);
           }

  }

但它抛出了一个异常,声明 'DynamicClass1' 不包含'v'的定义

【问题讨论】:

标签: c# linq dynamic-linq


【解决方案1】:

你可以像这样使用反射

foreach (var v in gFieldList)
       {
              MessageBox.Show(key.GetType().GetProperty(v).GetValue(key,null));
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多