c# - 在选择中使用 PredicateBuilder

标签 c# .net linq linq-to-sql

我正在为我的应用程序创建一个临时报告功能。 我将 PredicateBuilder 用于“Where”部分,但现在当我尝试在“Select”部分中使用它时,我无法成功。

代码示例:

   IQueryable<User> usersQuery = db.Users.AsQueryable();

    var where = PredicateBuilder.True<User>();
    //sample for the users query
    where = where.And(p => p.Enabled);


    var selectOrders = PredicateBuilder.True<UserOrder>();
    //sample for a query inside user orders
    selectOrders = selectOrders.And(p => p.Amount > 10);

    usersQuery = usersQuery.Where(where); //work
    var query = (from a in usersQuery
         select new
                {
                FirstName = a.FirstName,
                TotalOrders = a.UserOrders.Where(selectOrders).Count() //could not compile                                                                                               
                }).AsQueryable();

我觉得你做不到

.Select("new (TotalOrders = UserOrders.Where(BetAmount > @0).Count()")

在 DynamicLinq 中,但我无法使用它,因为我在“select”中调用了一些 sql 用户定义的函数,而 DynamicLinq 不支持它。

最佳答案

我认为这里的问题实际上在于,Linq to SQL 不支持您的查询所需的子查询。这就是为什么您的案例中的导航属性 UserOrders 没有实现 IQueryable 并且无法在其上运行查询。

我可能是错的。 但这证明我是对的:http://blog.robustsoftware.co.uk/2009/01/why-linq-to-sql-is-not-proper-orm.html

您应该使用更好的 ORM,例如 Entity Framework。

关于c# - 在选择中使用 PredicateBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594891/

相关文章:

c# - Xamarin ListView 图像在滚动上消失

.net - 你从混淆程序中得到的 exe 的速度是否不同?

c# - Linq 查询优化

c# - 在 LINQ 表达式中包含表计数

c# - 是否可以创建具有两个同名属性的类型?

c# - Linq to entity,使用不在运算符中的sql

c# - 在 Windows 中查询用户 session

c# - 使用手动设置凭据时,EWS 自动发现停止工作

c# - 如何查看路由器开放了哪些端口

c# - 在 .NET WinForms 中创建自定义菜单