如何使用IEnumerable的动态键/值对访问动态linq的结果? [英] How can I access the result of dynamic linq with dynamic key/value pairs of IEnumerable?

查看:75
本文介绍了如何使用IEnumerable的动态键/值对访问动态linq的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个动态Linq查询,通过该查询,我试图访问分为两列和使用聚合功能的1列的分组数据.

I have a Dynamic Linq query, through which am trying to access grouped data, grouped on two columns, and 1 columns on which aggregation function is used.

 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访问数据.

To access the data from the dQueryResult am using the following code.

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.

keeps on changing. They both need to be dynamic, which will not allow me to access the values dynamically from the above mentioned code since for now it's been coded as key.Supplier, key.Country and group.Sales .

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

How can I make the iteration of the result of the dynamic query as dynamic?

我尝试使用

    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'的定义

But it's throwing an exception stating 'DynamicClass1' does not contain a definition for 'v'

推荐答案

您可以像这样使用反射

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

这篇关于如何使用IEnumerable的动态键/值对访问动态linq的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆