c# - LINQ 在 Where 字符串中聚合

标签 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));

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

最佳答案

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/

相关文章:

c# - 如何为 ViewModel 中的列表添加验证

c# - Entity Framework 6 FluentApi 一对一关系配置

javascript - 如何将数据从 .NET Controller 显示到 React View ?

c# - LINQ 搜索包含带有对象的类的列表

Linq to Objects - 在列表中搜索的位置

c# - 尝试为 StudentId=1 获取 "Grade"时出错

entity-framework - Entity Framework 扩展抛出 DynamicProxy 异常

c# - .Net Core获取ApplicationUser的对象

c# - 具有相同名称方法的部分类

c# - 仅处理来自某些程序集的未处理异常