我正在从用户输入动态构建一个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));
我错过了什么吗? 感谢任何帮助!
答案 0 :(得分:0)
ObjectQuery
使用的字符串条件是实体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();