我的函数有四个参数:数据集,由表达式组成的数组(聚合函数),由应用表达式的列名组成的数组,以及由我必须分组的列组成的数组。
我的问题是我如何处理表达式和分组的动态列或字段,因为它可以在数量上变化(取决于数组值)。
我已经编写了静态查询代码,但需要通用的方法......
这是我的代码:
public void ExpressionManipulation(DataSet dsExprEvaluate, string[] strExpressions, string[] colName, string[] groupbyFields)
{
int groupByLength = groupbyFields.Length;
var groupByQueryEvaluate = from table in dsExprEvaluate.AsEnumerable()
group table by new { column1 = table["DataSourceType"], column2 = table["Polarity"] }
into groupedTable
select new
{
x = groupedTable.Key, // Each Key contains column1 and column2
y = groupedTable.Count(),
//z = groupedTable.Max(column1),
z = groupedTable.Sum(table => Convert.ToInt32(table["Polarity"]))
};
}
与上面一样,我可以在分组中有n个字段,就像现在我只有两个(DataSourceType和Polarity)和类似的我可以有n个字段用于表达式,总和,计数等将是一个数组作为参数。
请帮助我解决这个问题,这让我发疯了。
提前致谢。
答案 0 :(得分:0)
我自己想出来了,我最终解决的问题是:
var objGroupSumCountkey = dt.AsEnumerable()
.AsQueryable()
.GroupBy("new ( it[\"DataSourceType\"] as GroupByColumnName1,it[\"Polarity\"] as GroupByColumnName2)", "it")
.Select("new ( Sum(Convert.ToDouble(it[\"Polarity\"].ToString())) as SumValue,Count() as TotalCount,it.key)");
在上面的查询中,所有参数都将作为字符串提供,在Group By中并选择