首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在左联接后缺少导航属性

在左联接后缺少导航属性
EN

Stack Overflow用户
提问于 2017-12-21 16:06:20
回答 1查看 215关注 0票数 1

我试图对两个具有导航属性的实体进行左连接。我已经禁用了懒惰的装载。

这是我的代码:

代码语言:javascript
运行
复制
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是空的,等等。

如何包含这些导航属性并进行左外部连接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-21 16:43:04

在EF6中,当LINQ查询以投影(select new ...)结尾时,Includealways ignored。您唯一的选择是显式查询您希望包含的导航属性,然后进行项目到最终结果:

代码语言:javascript
运行
复制
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等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47928655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档