我在实体框架查询中遇到了一个非常奇怪的问题,我确实花了几个小时。
执行查询时,出现异常:
在构造函数和初始值设定项中,LINQ to Entities 仅支持属性或字段参数绑定。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NotSupportedException:在构造函数和初始化程序中,LINQ to Entities 仅支持属性或字段参数绑定。
我知道当您在查询中调用带有参数的构造函数时,通常会出现此问题。这是很自然的,因为 LINQ to Entities 无法知道那里发生了什么。
但是,我的查询仅使用对象初始化器语法来填充值,并且我假设将调用默认的无参数构造函数:
private static readonly Func<MyEntities, int, MessageParty> _getUserMessagePartyQuery = CompiledQuery.Compile(
( MyEntities ctx, int id ) =>
ctx.Users
.Where( u => u.ID == id )
.Select( u => new {
u, up = u.UserProfile, img = u.UserProfile.Image
})
.Select( info => new MessageParty
{
PartyID = id,
Title = info.u.FullName,
// Assignment below causes the failure:
Image = {
Image = info.img,
ExternalUrl = info.up.ExternalProfileImageUrl
},
} ).First()
);
重新迭代,导致失败的部分是:
Image = {
Image = info.img,
ExternalUrl = info.up.ExternalProfileImageUrl
}
Image
是 type 的一个属性ImageInfo
,它是超级简单的类:
public class ImageInfo
{
public Model.Image Image
{
get;
set;
}
public string ExternalUrl
{
get;
set;
}
}
除了简单的属性分配,我显然没有做任何其他事情。为什么这个查询会失败?