我需要加载一些用户和一些统计信息,但不是所有统计信息。正常我可以加载这样的东西:
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;
需要在内存中预加载,否则需要很长时间才能计算出来。
答案 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,只有我找到的方法是创建一个新的实例!