LINQ聚合在Where字符串中

时间:2013-06-20 13:21:45

标签: c# linq entity-framework entity

我正在从用户输入动态构建一个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));

我错过了什么吗? 感谢任何帮助!

1 个答案:

答案 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();