グループ化されたデータにアクセスしようとしている 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」の定義が含まれていないという例外がスローされます