【问题标题】:Why 'Lambda' is not supported in my LINQ to Entities syntax [duplicate]为什么我的 LINQ to Entities 语法不支持“Lambda”[重复]
【发布时间】:2013-01-28 21:57:10
【问题描述】:

当我尝试在 LINQ to Entities 中运行以下查询时出现错误:

public IEnumerable TestOne2()
{
    var query = this.Context.CmnAddressCities
        .Join(this.Context.CmnAddressStates, 
              p => p.StateID, q => q.StateID, 
              (p, q) => SelectSearchColumns)
        .ToList();

     return query;
}

public Expression<Func<CmnAddressCity,CmnAddressState, dynamic>>
    SelectSearchColumns = (e,r) => new
        {
            CityID = e.CityID,
            CityName = e.CityName,
            StateName=r.StateName,
        };

错误信息:

LINQ to Entities 不支持 LINQ 表达式节点类型“Lambda”。

想知道为什么会出现这个错误,如何解决这个问题。

如有任何疑问,请询问,谢谢。

【问题讨论】:

    标签: c# linq linq-to-entities iqueryable


    【解决方案1】:

    这个表达式

    (p, q) => SelectSearchColumns
    

    是一个返回表达式的表达式。尝试自行将其更改为SelectSearchColumns

    【讨论】:

      【解决方案2】:

      以下应该有效:

      var query = this.Context.CmnAddressCities
                      .Join(this.Context.CmnAddressStates, 
                            p => p.StateID, 
                            q => q.StateID, 
                            SelectSearchColumns)
                      .ToList();
      

      请参阅倒数第二行了解不同之处。您的版本会创建一个返回表达式的表达式。 EF 提供程序无法将其转换为 SQL,SQL 中表达式的等价性是什么?那不存在。
      您只需将表达式作为参数本身传递即可。

      【讨论】:

        【解决方案3】:

        在表达式(p, q) =&gt; SelectSearchColumns 中,您将SelectSearchColumns 传递给Join 方法,而不是调用它。然后查询提供程序无法将其转换为 SQL 语句,因为它是作为数据传递的,而不是被解释为调用。

        你需要一个

        .Join(this.Context.CmnAddressStates, 
             p => p.StateID, 
             q => q.StateID, 
             (p, q) => SelectSearchColumns(p, q))
        

        或短版

        .Join(this.Context.CmnAddressStates, 
             p => p.StateID, 
             q => q.StateID, 
             SelectSearchColumns)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多