gpt4 book ai didi

c# - LINQ to Entities 不支持调用

转载 作者:太空狗 更新时间:2023-10-29 20:17:48 26 4
gpt4 key购买 nike

我在 LINQ to Entities 中有以下查询:

var query = from p in db.Products
where p.Price > 10M
select p;

此时查询尚未执行,我想编写一个根据某些条件返回 true/false 的查询:

return query.Any(p => p.IsInStock &&
(p.Category == "Beverage" ||
p.Category == "Other"));

这很好用;但是,我想从我的代码中得到一些重用。我有很多方法需要根据类别是饮料还是其他进行过滤,所以我尝试创建一个委托(delegate):

Func<Product, bool> eligibleForDiscount = (product) => product.Category == "Beverage" || product.Category == "Other";

我想用委托(delegate)代替内联检查:

return query.Any(p => p.IsInStock && eligibleForDiscount(p));

这给我一个错误,指出 LINQ to Entities 不支持调用。为什么我不能像这样用内联代码替换委托(delegate),还有什么方法可以通过其他方式实现我的重用?

最佳答案

回想一下 Linq-to-{DATABASE}只是在改造 IQueryable你已经生成了 Sql。

你不能像那样内联代码,因为 Invoke (您在调用 FuncAction 时实际调用的方法)没有一致的方法将其转换为 sql 语句(您可以在其中做任何)。 p>

也就是说你可以通过拆分来重用部分:

var query = from p in db.Products
where p.Price > 10M
select p;

query = query.Where(p => p.IsInStock);
query = query.Where(p => p.Category == "Beverage" || p.Category == "Other");
return query.Any();

这两个都可以放入采用 IQueryable<Product> 的方法中并返回相同的(但过滤)。然后就可以尽情的重复使用了!

关于c# - LINQ to Entities 不支持调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10621938/

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