C# 使用include加载相关表的实体,但如何将其左外部联接

C# 使用include加载相关表的实体,但如何将其左外部联接,c#,linq,lambda,entity,C#,Linq,Lambda,Entity,我需要加载一些用户和一些统计数据,但不是所有的统计数据。正常情况下,我可以加载如下内容: db.stat_user.ToList() 并通过db.stat\u user.local访问它(然后添加项目并预加载) stat_user是1 to manny to stat_counter,并使用sql server中的关系进行设置。有一年的时间,我只想预装一年 此表达式可以工作,但它会加载所有相关的stat_计数器 db.stat_user.include("stat_counter").toli

我需要加载一些用户和一些统计数据,但不是所有的统计数据。正常情况下,我可以加载如下内容:

db.stat_user.ToList()
并通过
db.stat\u user.local
访问它(然后添加项目并预加载)

stat_user是1 to manny to stat_counter,并使用sql server中的关系进行设置。有一年的时间,我只想预装一年

此表达式可以工作,但它会加载所有相关的stat_计数器

db.stat_user.include("stat_counter").tolist();
然后我试了一下:

db.stat_user
    .Include("stat_counter")
    .Where(e => e.stat_counter.Any(a => a.year == year))
    .ToList();
仍然加载所有,但只需要一年

如何获取数据并仍然具有etc.db.stat\u user.local的功能。是否已预加载相关统计计数器

我带着这些旗帜跑步:

db.Configuration.AutoDetectChangesEnabled = false;
db.Configuration.LazyLoadingEnabled = false;

需要在内存中预加载,否则需要很长时间才能计算。

正如Sergey提到的,这不可能马上实现,因此最终得到:

        List<stat_user> lsu = s.stat_user.ToList();
        List<int> ids = lsu.Select(e => e.id).ToList();
        List<stat_counter> lsc = s.stat_counter.Where(e => e.year == year 
                                                      && ids.Contains(e.user_fk))
                                                            .ToList();
List lsu=s.stat_user.ToList();
List id=lsu.Select(e=>e.id.ToList();
列出lsc=s.stat\u计数器,其中(e=>e.year==year
&&ids.Contains(如用户_-fk))
.ToList();
然后lsu用户将自动链接到EF中稍后加载的统计计数器。
这给了antoher一个问题,如何清除EF,我发现的唯一方法就是创建一个新实例

你不能用EFM过滤相关实体,谢谢-然后我换了一种方式