繁体   English   中英

在select中使用PredicateBuilder

[英]using PredicateBuilder inside a select

我正在为我的应用程序创建一个Ad-hoc报告功能。 我将PredicateBuilder用于“Where”部分,但现在当我试图在“选择”部分使用它时,我无法成功。

代码示例:

   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。

这样的解决方法怎么样? 您已根据架构更改了连接条件

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

var usersQuery = from u in db.Users.Where(where)
                 join o in db.UserOrders.Where(selectOrders) 
                        on u.UserId equals o.UserId
                 group o by u into groupedOrders
                 select new
                 {
                    FirstName = groupedOrders.Key.FirstName,
                    TotalOrders = groupedOrders.Count()                                                                                              
                 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM