C# EF 6包含但不包含关系的复杂查询

C# EF 6包含但不包含关系的复杂查询,c#,.net,database,entity-framework,entity-relationship,C#,.net,Database,Entity Framework,Entity Relationship,我有一个比较复杂的结构,我不会进入, 但我尝试做的是: 获取所有ShopItems,谁的SourceItem已更改, 根据他们的来源/店铺数据获取并更新他们 我想到了以下几点: var query = _ctx.ShopItems .Include(si => si.Shop) .Include(si=>si.SourceItem) .Include(si => si.SourceItem.Source)

我有一个比较复杂的结构,我不会进入, 但我尝试做的是:

获取所有ShopItems,谁的SourceItem已更改, 根据他们的来源/店铺数据获取并更新他们

我想到了以下几点:

var query = _ctx.ShopItems
            .Include(si => si.Shop)
            .Include(si=>si.SourceItem)
            .Include(si => si.SourceItem.Source)
            .Include(si=>si.Shop.ShopType)
            .GroupBy(i => i.SourceItem)
            .Where(g => g.Key.LastUpdate > lastUpdate)
            .OrderBy(g => g.Key.LastUpdate)
            .Take(updateCountLimit);
该查询似乎有效,但在对组进行评级时:

groupItem.Key.Source
为空

通过删除
Include()
s,将实体保存到数组中,并使用
\u ctx.Entry(updatedSourceItem.Key).Reference(src=>src.Source.Load()


如何执行我想要的查询而不往返数据库以进行显式加载?

不确定,但从ShopItems开始,然后按SourceItem分组是反向的。试着从SourceItem开始,比如

:

    var query = _ctx.SourceItems
                    .Include(i => i.ShopItems)
                    .Include(i => i.Source)
                    .Include(i => i.ShopItems.Select( si => si.Shop))
                    .Include(i => i.ShopItems.Select( si => si.Shop).ShopType)
                    .Where(i => i.LastUpdate > lastUpdate)
                    .OrderBy(i => i.LastUpdate)
                    .Take(updateCountLimit);
//or 

    var query = _ctx.SourceItems
                    .Include("ShopItems")
                    .Include("Source")
                    .Include("ShopItems.Shops")
                    .Include("ShopItems.Shops.ShopType")
                    .Where(i => i.LastUpdate > lastUpdate)
                    .OrderBy(i => i.LastUpdate)
                    .Take(updateCountLimit);

这听起来确实合乎逻辑,我来试一试。忘了检查我使用的实际解决方案:)