在我的项目中,我使用几个linq查询来获取价格列表。 我需要根据这些价格来计算价值。
是否可以直接从linq查询中调用用户方法(理想情况下,可以在实体类中),例如,这样做是完美的
from foo in Foo
select new {
price = foo.Price,
priceclass = foo.GetClassOfPrice()
}
GetClassOfPrice无法访问数据,只是基于价格的静态代码。
提前感谢!
答案 0 :(得分:5)
Linq-To-Entities只能调用概念模型(EDMX)中定义的特殊类型的方法。这些方法称为Model defined functions。因此,如果您以这种方式定义方法will be able to call it。您还可以查看this blog post。
答案 1 :(得分:3)
您只能通过LINQ to Objects调用该方法,因为方法调用没有转换为SQL。如果你实现查询 - 首先将它带入内存 - 然后进行选择它应该工作。
var foos = context.Foo.ToList()
.Select( f => new
{
price = f.Price,
priceClass = f.GetClassOfPrice()
} );
请注意,在执行Where
之前,您应该执行任何条件逻辑(ToList
),这样您只需从数据库传输实际需要的数据。我正在使用扩展方法,因为它对我来说更自然,因为无论如何你都需要使用ToList
或类似的方法。我真的不喜欢将LINQ语法与扩展方法混合使用。
答案 2 :(得分:1)
不幸的是,这无法完成,因为您的LINQ查询已转换为SQL。而这种翻译的所谓提供者并不知道你的方法。
答案 3 :(得分:1)