我正在使用动态 LINQ 创建一个 groupby 并动态选择。我的项目是键/值集合(字典),因此它们不包含任何属性(这是设计要求,无法更改)。我能够在另一个问题中解决 groupby 部分,但它似乎不适用于 select 方法。
我的代码如下:
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(" )");
// and now the select string
StringBuilder selectSB = new StringBuilder();
selectSB.Append("new ( ");
useComma = false;
foreach (var name in groupbyNames)
{
if (useComma)
selectSB.Append(", ");
else
useComma = true;
selectSB.Append("Key.")
//.Append(name)
//.Append(" as ")
.Append(name);
}
foreach (var name in summableNames)
{
if (useComma)
selectSB.Append(", ");
else
useComma = true;
selectSB.Append("Sum(")
.Append("it[\"")
.Append(name)
.Append("\"]")
.Append(") as ")
.Append(name);
}
selectSB.Append(" )");
var groupby = list.GroupBy(groupBySB.ToString(), "it");
var select = groupby.Select(selectSB.ToString());
}
选择字符串的 Key 部分没问题,但 Sum 部分不起作用。假设我想要的键称为值,我尝试过:
“总和(值)”:ParseException:预期表达式
"Sum(\"value\")" : ParseException: 表达式预期
“Sum(it[\"value\"])”:ParseException:不存在适用的聚合方法“Sum”
“Sum(it[value])”:ParseException:“字典”类型中不存在属性或字段“值”
"Sum([\"value\"])" : ParseException: 表达式预期
但都失败了。有任何想法吗?
谢谢!肖恩