我的标题有点令人困惑,所以我会在这里解释一下。
以下是我的示例查询及我希望实现的内容:
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是一个datatable,字典的所有键构成了datatable的一些标题。对我来说,这似乎是不可能的,我已经查阅了一些来源,其中之一(对不起,我忘记了作者......)给了我这个解决方案:
//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));
这让我得到了一个无法利用的对象,或者至少不能调用其属性。我真的很希望能在实现原始目标方面获得任何帮助,对于这篇长文我感到抱歉。 编辑 预期的输入是数据表格,例如:
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
获胜者:奶牛,所以领养一只奶牛*只是开个玩笑哈。