2

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

我错过了什么吗? 任何帮助表示赞赏!

4

1 回答 1

0

使用的字符串条件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();
于 2013-06-21T10:04:30.620 回答