向LINQ查询添加方法

时间:2012-07-11 09:56:52

标签: linq entity-framework

我正在尝试创建一个简单的LINQ查询,如下所示:

var query = from o in entities.Orders   
        select new Order
        {
            Firstname = o.FirstName,
            Lastname = GetName()
        };    

这里我希望从数据库中获取FirstName,并且我想从另一个源提供Lastname。当我运行这个时,我得到一个异常:“LINQ to Entities无法识别方法'System.String GetName()'方法,并且此方法无法转换为商店表达式。”

如何将自己的方法添加到LINQ查询中?

2 个答案:

答案 0 :(得分:2)

你不能,你必须解决你有其他方式的问题,通常是分成两个预测,一个可能被转换为SQL并在数据库服务器上运行,一个在客户端上运行。

var query =
    from o in
        (from o in entities.Orders
         select new
         {
             o.FirstName,
         }).AsEnumerable()
    select new Order
    {
        Firstname = o.FirstName,
        Lastname = GetName()
    };    

注意:结果不是IQueryable,您可能添加的任何过滤或排序也会在客户端上运行。

答案 1 :(得分:1)

您无法将自己的方法添加到Linq到实体查询,因为该查询已转换为SQL并在SQL Server上执行。唯一允许的自定义方法必须是映射的SQL函数或模型定义的函数(在EDMX中定义的ESQL函数)。

如果要在Linq查询中执行.NET方法,必须首先从Linq-to-entities查询中实现结果(执行SQL),并继续执行在应用程序中执行的Linq-to-objects查询。