向LINQ查询添加方法
我正在尝试创建一个简单的LINQ查询,如下所示:向LINQ查询添加方法,linq,entity-framework,Linq,Entity Framework,我正在尝试创建一个简单的LINQ查询,如下所示: var query = from o in entities.Orders select new Order { Firstname = o.FirstName, Lastname = GetName() }; 在这里,我希望从数据库中获得FirstName,并希望从另一个来源提供Lastname。当我运行此命令时,会出现一个异常:“L
var query = from o in entities.Orders
select new Order
{
Firstname = o.FirstName,
Lastname = GetName()
};
在这里,我希望从数据库中获得FirstName,并希望从另一个来源提供Lastname。当我运行此命令时,会出现一个异常:“LINQ to Entities无法识别方法'System.String GetName()'方法,并且此方法无法转换为存储表达式。”
如何将自己的方法添加到LINQ查询?您不能将自己的方法添加到LINQ to entities查询,因为该查询已转换为SQL并在SQL server上执行。唯一允许的自定义方法必须是映射的SQL函数或模型定义的函数(在EDMX中定义的ESQL函数)
如果要在Linq查询中执行.NET方法,必须首先将结果(执行SQL)从Linq到实体查询具体化,然后继续在应用程序中执行Linq到对象查询。您不能将自己的方法添加到Linq到实体查询中,因为该查询已转换为SQL并在SQL server上执行。唯一允许的自定义方法必须是映射的SQL函数或模型定义的函数(在EDMX中定义的ESQL函数)
如果要在Linq查询中执行.NET方法,必须首先将结果(执行SQL)从Linq到实体查询具体化,然后继续在应用程序中执行Linq到对象查询。如果不能,则必须以其他方式解决问题,通常是通过拆分为两个投影,一个可以转换为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
,您可能添加的任何筛选或排序也将在客户端上运行。您不能,您必须以其他方式解决您遇到的问题,通常是通过拆分为两个投影,一个可以转换为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
,您可能添加的任何筛选或排序也将在客户端上运行。谢谢hvd。有没有办法避免重写其他参数?我有很多参数和名字。我不想在查询和枚举中重复它们。您可能可以执行类似于var orders=(从实体中的o.orders选择新顺序{FirstName=o.FirstName})。AsEnumerable().select(o=>{o.Lastname=GetName();return o;})
,但这是否有效取决于类的行为。据我所知,第二个Select
无法使用LINQ语法编写。谢谢hvd。有没有办法避免重写其他参数?我有很多参数和名字。我不想在查询和枚举中重复它们。您可能可以执行类似于var orders=(从实体中的o.orders选择新顺序{FirstName=o.FirstName})。AsEnumerable().select(o=>{o.Lastname=GetName();return o;})
,但这是否有效取决于类的行为。据我所知,第二个Select
不能用LINQ语法编写。