C# 如何在字典列表上动态构建group by
我正在尝试在IEnumerable上执行groupby。问题是,我在编译时不知道要按哪些字段分组。我在stack上找到了一个例子,它解释了当类已知且具有属性时如何执行此操作,但在我的例子中,我处理的是一个字典,键也只有在运行时才知道 我的代码类似于这样(我知道这不会编译…):C# 如何在字典列表上动态构建group by,c#,linq,dynamic,datatable,group-by,C#,Linq,Dynamic,Datatable,Group By,我正在尝试在IEnumerable上执行groupby。问题是,我在编译时不知道要按哪些字段分组。我在stack上找到了一个例子,它解释了当类已知且具有属性时如何执行此操作,但在我的例子中,我处理的是一个字典,键也只有在运行时才知道 我的代码类似于这样(我知道这不会编译…): 私有对象GetValuesGroupedBy(列出groupbyNames,列出summableNames) { //获取网格中的项目列表 var listOfDicos=grid.AllItems; 返回目录 .Grou
私有对象GetValuesGroupedBy(列出groupbyNames,列出summableNames)
{
//获取网格中的项目列表
var listOfDicos=grid.AllItems;
返回目录
.GroupBy(x=>new{x[groupbyNames[0]],
x[groupbyNames[1]],
x[groupbyNames[2]]})
.Select(group=>new{group.Key,
group.Sum(x=>x[summableNames[0]]),
Sum(x=>x[summableNames[1]]);
}
有什么想法吗?我已经开始研究动态LINQ,但我被卡住了(因为我使用的不是属性,而是键/值集合)
谢谢大家
肖恩所以我可以让groupby工作。。。(select语句是另一个问题)。感谢c0d1ng让我走上了正确的道路。语法不是那么简单,因为我使用的是索引器而不是属性 下面是我的代码:
private void GetValuesGroupedBy(List<Dictionary<string, object>> list, List<string> groupbyNames, List<string> summableNames)
{
// build the groupby string
StringBuilder groupBySB = new StringBuilder();
groupBySB.Append("new ( ");
bool useComma = false;
foreach (var name in groupbyNames)
{
if (useComma)
groupBySB.Append(", ");
else
useComma = true;
groupBySB.Append("it[\"");
groupBySB.Append(name);
groupBySB.Append("\"]");
groupBySB.Append(" as ");
groupBySB.Append(name);
}
groupBySB.Append(" )");
var groupby = list.GroupBy(groupBySB.ToString(), "it");
}
private void GetValuesGroupedBy(列表、列表groupbyNames、列表summableNames)
{
//构建groupby字符串
StringBuilder groupBySB=新建StringBuilder();
groupBySB.Append(“新(”);
bool-usecoma=false;
foreach(groupbyNames中的变量名)
{
如果(使用逗号)
groupBySB.追加(“,”);
其他的
usecoma=true;
Append(“it[\”);
groupBySB.Append(名称);
groupBySB.Append(“\”]);
groupBySB.追加(“as”);
groupBySB.Append(名称);
}
groupBySB.追加(“)”;
var groupby=list.groupby(groupBySB.ToString(),“it”);
}
private void GetValuesGroupedBy(List<Dictionary<string, object>> list, List<string> groupbyNames, List<string> summableNames)
{
// build the groupby string
StringBuilder groupBySB = new StringBuilder();
groupBySB.Append("new ( ");
bool useComma = false;
foreach (var name in groupbyNames)
{
if (useComma)
groupBySB.Append(", ");
else
useComma = true;
groupBySB.Append("it[\"");
groupBySB.Append(name);
groupBySB.Append("\"]");
groupBySB.Append(" as ");
groupBySB.Append(name);
}
groupBySB.Append(" )");
var groupby = list.GroupBy(groupBySB.ToString(), "it");
}