gpt4 book ai didi

c# - 在选择中使用 PredicateBuilder

转载 作者:行者123 更新时间:2023-11-30 16:30:31 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com