为什么';Lambda';在我的LINQ to Entities语法中不支持
本文关键字:Entities 语法 不支持 to 我的 Lambda 为什么 LINQ | 更新日期: 2023-09-27 17:58:59
当我尝试在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"。
我想知道为什么会出现这个错误,以及如何解决这个问题。
以下内容应该有效:
var query = this.Context.CmnAddressCities
.Join(this.Context.CmnAddressStates,
p => p.StateID,
q => q.StateID,
SelectSearchColumns)
.ToList();
差异见倒数第二行。您的版本创建了一个返回表达式的表达式。EF提供程序无法将其转换为SQL,SQL中表达式的等效性是什么?这是不存在的
您只需将表达式作为参数本身传递即可。
此表达式
(p, q) => SelectSearchColumns
是一个返回表达式的表达式。尝试将其单独更改为SelectSearchColumns
。
在表达式(p, q) => 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)