使用include的实体加载相关表但是如何离开外连接它

时间:2014-08-25 14:58:42

标签: c# linq lambda entity

我需要加载一些用户和一些统计信息,但不是所有统计信息。正常我可以加载这样的东西:

db.stat_user.ToList()

并通过db.stat_user.local访问它(然后它会添加项目,并预先加载)

stat_user是1到manny到stat_counter,并且是从sql server设置的关系。有一年和一年,我只想预先等一年。

此表达式有效,但它会加载所有相关的stat_counters

db.stat_user.include("stat_counter").tolist();

然后我尝试了这个:

db.stat_user
    .Include("stat_counter")
    .Where(e => e.stat_counter.Any(a => a.year == year))
    .ToList();

仍然加载所有,但只需要一年!

如何获取数据并仍具有db.stat_user.local等功能。已预加载相关的stat_counters?

我用这些标志运行:

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

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

1 个答案:

答案 0 :(得分:1)

好吧谢尔盖提到它不可能马上就这样结束了:

        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();

然后lsu用户自动链接到稍后在EF中加载的stat_counters。 这给了另一个问题,如何清除EF,只有我找到的方法是创建一个新的实例!