Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向LINQ查询添加方法_Linq_Entity Framework - Fatal编程技术网

向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

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

您不能将自己的方法添加到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语法编写。