Linq 当同一查询的参数每次更改时,编译后的查询是否有效?
我不熟悉实体框架。我正在使用一个linq查询,它将从数据库中获取许多记录(多达数百万条)。在条件中有许多过滤器参数,在每个请求中参数都可能更改。所以我想知道编译后的查询在这种情况下是有效的,还是在每个请求上都是一个新的查询。我的问题是:Linq 当同一查询的参数每次更改时,编译后的查询是否有效?,linq,entity-framework,entity-framework-5,Linq,Entity Framework,Entity Framework 5,我不熟悉实体框架。我正在使用一个linq查询,它将从数据库中获取许多记录(多达数百万条)。在条件中有许多过滤器参数,在每个请求中参数都可能更改。所以我想知道编译后的查询在这种情况下是有效的,还是在每个请求上都是一个新的查询。我的问题是: List<FarmerDetailsReport> fdr = (from fp in mstfp join pd in personalDetails on fp.personDetails.Id equals pd.Id join ic in
List<FarmerDetailsReport> fdr =
(from fp in mstfp join pd in personalDetails on fp.personDetails.Id equals pd.Id
join ic in identityCertificate on fp.identityCertificate.Id equals ic.Id
join pid in pacsInsuranceData on fp.pacsInsuranceData.Id equals pid.Id into temp
from pid in temp.DefaultIfEmpty()
join bd in bankDetails on fp.bankDetails.Id equals bd.Id
join cd in contactDetails on fp.contactDetails.Id equals cd.Id
join id in incomeDetails on fp.incomeDetails.Id equals id.Id into tmp
from id in tmp.DefaultIfEmpty()
join ua in userAttributes on fp.UserId equals ua.EmailID
where ((ua.CompanyName == companyName ) && (cd.District == model.DistrictForProfileMIS ) && (cd.Block == model.BlockForProfileMIS) && (bd.bankName == model.BankForProfileMIS ) && Status == "Active")
select new FarmerDetailsReport { .......... }).ToList();
列表fdr=
(从mstfp中的fp加入fp.personDetails.Id上personalDetails中的pd等于pd.Id
在fp.identityCertificate.Id上的identityCertificate中加入ic等于ic.Id
将fp.pacsInsuranceData.Id等于pid.Id的pacsInsuranceData中的pid连接到temp中
来自temp.DefaultIfEmpty()中的pid
将bd加入fp.bankDetails.Id上的bankDetails等于bd.Id
在fp.contactDetails.Id等于cd.Id的contactDetails中加入cd
将fp.incomeDetails.id等于id.id的incomeDetails中的id加入tmp
来自tmp.DefaultIfEmpty()中的id
在fp.UserId等于ua.EmailID的userAttributes中加入ua
其中((ua.CompanyName==CompanyName)&&(cd.District==model.DistrictForProfileMIS)&&(cd.Block==model.BlockForProfileMIS)&&(bd.bankName==model.BankForProfileMIS)&&Status==Active)
选择new FarmerDetailsReport{………}).ToList();
简短回答:
是的。。。。。。嗯,也许吧
长答覆:
这很难回答,因为您无法控制生成的实际SQL
我们在一些查询中遇到了perf问题,比如优化器会针对特定的湿过滤器情况(如子句短路)进行优化,然后当新查询的参数发生巨大变化时,它会花费很长时间
我们最后做了什么:
选项(重新编译)
。。。查一下这个很有用