我正在为我的应用程序创建一个临时报告功能。 我将 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/