我试图对两个具有导航属性的实体进行左连接。我已经禁用了懒惰的装载。
这是我的代码:
var awis =
from ai in Context.AdItems
.Include(ai => ai.Item)
.Include(ai => ai.Item.Buyer)
.Include(ai => ai.Item.OrderHeader)
.Where(ai => ai.AdYear == adYear && ai.AdNumber == adNumber)
join si in Context.StoreItems
.Include(si => si.Store)
.Where(si => si.StoreId == storeId) on ai.ItemId equals si.ItemId into x
from r in x.DefaultIfEmpty()
select new AdWeekItem
{
AdItemId = ai.AdItemId,
AdItem = ai,
StoreItemId = r == null ? 0 : r.StoreItemId,
StoreItem = r
};外部联接工作正常,但我的导航属性没有包含在投影的AdWeekItem中。
也就是说,AdWeekItem.AdItem.Item是空的,等等。
如何包含这些导航属性并进行左外部连接?
发布于 2017-12-21 16:43:04
在EF6中,当LINQ查询以投影(select new ...)结尾时,Include是always ignored。您唯一的选择是显式查询您希望包含的导航属性,然后进行项目到最终结果:
var temp = from ai in Context.AdItems
.Where(ai => ai.AdYear == adYear && ai.AdNumber == adNumber)
join si in Context.StoreItems
.Where(si => si.StoreId == storeId) on ai.ItemId equals si.ItemId into x
from r in x.DefaultIfEmpty()
select new
{
AdItemId = ai.AdItemId,
AdItem = ai,
ai.Item,
ai.Item.Buyer,
ai.Item.OrderHeader,
StoreItemId = r == null ? 0 : r.StoreItemId,
StoreItem = r,
r.Store
};
var awis = from x in temp.AsEnumerable() // pull into memory and continue
select new AdWeekItem
{
AdItemId = x.AdItemId,
AdItem = x.AdItem,
StoreItemId = x.StoreItemId,
StoreItem = x.StoreItem
};EF将通过关系修复(即导航属性的自动填充)填充AdItem.Item等。
https://stackoverflow.com/questions/47928655
复制相似问题