0

グループ化されたデータにアクセスしようとしている Dynamic Linq クエリがあり、2 つの列でグループ化され、集計関数が使用されている 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」の定義が含まれていないという例外がスローされます

4

1 に答える 1