私のタイトルは少し混乱しますのでここで説明します。C#LINQ:グループ化されたクエリの値の合計を含むプロパティと値を動的に作成します。
var results = from row in toSearch.AsEnumerable()
group by row.Field<String>("Somename") into grp
select new
{
GroupMe = grp.Key,
foreach (var k in someDic.Keys){
TODOPROPERTYNAMEFROMk = grp.sum(x => grp.k);
}
};
これは私が達成したいものの一般的な考え方です:
これは私のサンプルクエリと私は達成したいです。キーの辞書に基づいて、グループ化されたクエリからデータを集計しながら、キーからプロパティ名を作成する必要があります。合計はキーの値に基づいて決まります。
toSearchはデータテーブルであり、辞書のすべてのキーがデータテーブルのヘッダーの一部を構成します。私は、このソリューションを与えた(私は....申し訳ありません作者を失った)これは私には不可能だと私はいくつかのソースとそれの1を検索しました:
//For generating dynamic objects fr
public static object DynamicProjection(object input, IEnumerable<string> properties)
{
var type = input.GetType();
dynamic dObject = new System.Dynamic.ExpandoObject();
var dDict = dObject as IDictionary<string, object>;
foreach (var p in properties)
{
var field = type.GetField(p);
if (field != null)
dDict[p] = field.GetValue(input);
var prop = type.GetProperty(p);
if (prop != null && prop.GetIndexParameters().Length == 0)
dDict[p] = prop.GetValue(input, null);
}
return dObject;
}
私はこの
ようにそれを使用しようとしましたvar results = from row in toSearch.AsEnumerable()
group by row.Field<String>("Somename") into grp
select grp;
var test = results.Select(x => DynamicProjection(x,someDic.Keys));
これは、私が利用できなかった、または少なくともプロパティを呼び出すことができないオブジェクトを私に与えました。私は本当に元のものを達成するための助けに感謝し、長いポストのために残念です。
編集が 期待入力がDataTableの例です:ヘッダーによって
Fee | Fi | Fo | Fum
cat | ds | 2 | 93
cow | ff | 5 | 120
cat | ds | 9 | 33
cow | jk | 1 | 133
グループ:受信料
ヘッダ:Foは、FUM
予想される出力:
cat | 11 | 126
cow | 6 | 253
勝者:牛、だから牛を採用する*ちょっと冗談を言って
はあなたが私たちに入力し、(予想)出力形式を表示することができますか? –
@HariPrasad更新されました:これを読んでいただきありがとうございます –
受信したヘッダーに基づいて、それらの列の合計が必要ですか? –