我正在尝试创建一个简单的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查询中?
答案 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查询。