Linq to entity - 从查询中调用用户定义的方法

时间:2011-02-17 13:36:32

标签: linq entity-framework-4

在我的项目中,我使用几个linq查询来获取价格列表。 我需要根据这些价格来计算价值。

是否可以直接从linq查询中调用用户方法(理想情况下,可以在实体类中),例如,这样做是完美的

from foo in Foo
select new {
  price = foo.Price,
  priceclass = foo.GetClassOfPrice()
}

GetClassOfPrice无法访问数据,只是基于价格的静态代码。

提前感谢!

4 个答案:

答案 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)