我知道实体框架有一些LINQ支持问题(至少与其前身LINQ to SQL相比)......通常我可以找到重构我的LINQ查询的创造性方式它支持EF并且不抛出一个实体框架复杂LINQ支持
"Unable to create a constant value of type ..."
但是这次我遇到了麻烦。像往常一样,这个问题与复杂的连接有关。这次我们需要对一些我正在使用的遗留数据进行建模。
我有办事处查询(一个简单的POCO)
public IQueryable<Office> Offices
{
get
{
IQueryable<Office> query =
from pn in _context.Locations
where pn.Type == "Y"
select new Office
{
Id = pn.Id + 1000,
Name = pn.Name,
};
query = query.Union(
from r in _context.Resources
where r.ResourceType == "L"
select new Office
{
Id = r.ResourceId,
Name = r.ResourceName,
});
return query;
}
}
然后,我有别的东西上有一个写字楼物业。
public IQueryable<ScheduleEntry> ScheduleEntries
{
get
{
return
from pc in _context.CalendarEntries
join o in this.Offices on pc.LocationId
equals o.Id into offices
from office in offices.DefaultIfEmpty()
let mainOffice = this.Offices.First()
select new ScheduleEntry
{
Id = pc.CalendarId,
StartDateTime = pc.StartDateTime ?? DateTime.MinValue,
EndDateTime = pc.EndDateTime ?? DateTime.MinValue,
Office = pc.LocationId == 0 ? mainOffice : office,
};
}
}
请注意,告诉我使它成为一个枚举失败的目的......所以请不要提醒。
等等....做CalendarEntries.ToArray()
抛出"Unable to create a constant value of type Office"...
具体问题是let mainOffice = Offices.First()
。如果我删除该逻辑,查询工作正常。任何想法如何使这个工作与实体框架?
谢谢。
哇。 “可怜的LINQ支持?”我认为你应该把这个问题关闭的情绪或风险编辑为主观和论证。坚持这一点。 – 2011-05-29 01:35:35
EF没有差的linq支持。它不依赖于商店。 Linq to sql基本上是一个SQL Server代码生成,而EF是一个真正的ORM。这意味着只有在任何数据存储(不只是SQL Server)中有办法执行它们时,计算的属性才会起作用。这不是不好的支持,只是通用的数据存储支持。 – Gats 2011-05-29 01:42:18
这听起来更像是一个威胁,而不是一个建议。虽然公平,但我正在寻求帮助,而不是威胁。 – Jeff 2011-05-29 01:43:06