我有一个数据库,用户可以在上面运行各种计算。这些计算涉及4个不同的列,但并不是每个计算都必须使用所有列,例如,计算1可能会转换为如下的SQL语句:
SELECT SUM(Column1)
FROM TABLE
WHERE Column1 is not null
计算2将会是
SELECT SUM(Column2)
WHERE Column2 is null
我尝试使用LINQ生成这个,通过每次计算来获取正确的数据,例如:
table.Where(x => x.Column1 != null)
.Where(x => x.Column2 == null)
.GroupBy(x => x.Date)
.Select(dateGroup => new
{
Calculation1 = dateGroup.Sum(x => x.Column1 != null),
Calculation2 = dateGroup.Sum(x => x.Column2 == null)
}
问题在于我的数据集非常大,因此除非用户要求计算,否则我不想执行计算。我已经研究了动态生成Linq查询。到目前为止,我找到的全部是PredicateBuilder和DynamicSQL,它们似乎只对动态生成Where谓词有用,并在必要时将Sum(Column1)或Sum(Column2)作为字符串插入硬编码的SQL查询本身。
如何动态添加不同部分的Select查询到像这样的匿名类型中?还是我应该寻找一种完全不同的处理方式?
Select
。 - Nathan A