我正在根据用户输入动态构建一个 where-condition-string 以查询 ObjectSet。
所以我有这样的东西:
// Filter name
whereConditions.Add("it.Name=@Name");
parameters.Add(new ObjectParameter("Name", model.Name));
// Filter Bonuspoints
whereConditions.Add("it.CustomerBonusPoint.BonusPoints=@BonusPoints");
parameters.Add(new ObjectParameter("BonusPoints", model.BonusPoints));
// Query
db.persons.Where(whereConditions, parameters.ToArray());
如上所示,即使对于相关对象也能完美运行。
但不知何故我无法使用聚合。这不起作用:
whereConditions.Add("it.CustomerSaleFigures.Sum(x=>x.Turnover)>@Turnover");
parameters.Add(new ObjectParameter("Turnover", model.Turnover));
我错过了什么吗? 感谢任何帮助!
最佳答案
ObjectQuery
使用的字符串条件是 Entity SQL,不是 C# Linq。
whereConditions.Add(@"
Sum(
SELECT Turnover
FROM NAVIGATE(it.CustomerSaleFigures)
) > @Turnover");
parameters.Add(new ObjectParameter("Turnover", model.Turnover));
(我不确定是否需要 NAVIGATE()
)
或者,您可以使用 Linq:
IQueryable<Person> query = db.persons;
query = query.Where(c => c.Name == model.Name);
query = query.Where(c => c.CustomerBonusPoint.BonusPoints == model.BonusPoints);
query = query.Where(c => c.CustomerSaleFigures.Sum(sf => sf.Turnover) > model.Turnover);
return query.ToList();
关于c# - LINQ 在 Where 字符串中聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214792/