我想创建一个基于从数据库读取的一系列布尔值来修改查找的函数。
我尝试了这样一种方法:
IEnumerable<RootDomain> lookup = db.RootDomains;
//bools are nullable
if (conditions.HasCompanyMatch == true) lookup = lookup.Where(x => x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasCompanyMatch == false) lookup = lookup.Where(x => !x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasEmail == true) lookup = lookup.Where(x => x.EmailMessages.Count() > 1);
// etc.. more bool switches
//very slow when it enumerated in any way
var count = lookup.Count();它可以工作,但速度非常慢。当枚举查找被枚举时,内存使用率会跳到800mb左右,这需要几分钟的时间,而如果我在一个步骤中完成所有这些工作,只需要几秒钟,内存大约是60mb。
我假设这样做是添加一些递归查询或其他东西,但我不确定。
在不破坏性能的情况下实现这一目标的正确方法是什么?
发布于 2017-01-24 13:29:31
当你链接你的条件时,它会计算每一条语句吗?
我认为将初始查找视为IQueryable将意味着它应该仅在您检索数据(例如您的计数)时进行评估:
IQueryable<RootDomain> lookup = db.RootDomains;https://stackoverflow.com/questions/41819894
复制相似问题