0

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

4

2 回答 2

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,您可能添加的任何过滤或排序也将在客户端上运行。

于 2012-07-11T10:09:02.407 回答
1

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

如果您想在 Linq 查询中执行 .NET 方法,您必须首先从 Linq-to-entities 查询中具体化结果(执行 SQL),然后继续在您的应用程序中执行 Linq-to-objects 查询。

于 2012-07-11T10:08:36.177 回答