我的标题有点令人困惑,所以我会在这里解释一下。
这是我的示例查询以及我希望实现的目标:
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 是一个数据表,字典的所有键组成了数据表的一些标头。这对我来说似乎是不可能的,我已经搜索了一些来源,其中之一(抱歉我失去了作者......)给了我这个解决方案:
//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));
这给了我一个我无法利用或至少无法从中调用属性的对象。我真的很感谢任何帮助我实现我最初追求的目标,并对这篇长篇文章表示歉意。
Edit预期输入是数据表,例如:
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
获胜者:牛,所以收养一头牛*只是开玩笑,哈哈