我有这样一个SQL (片段)
var sSQL = @"DECLARE @HFID INT, @PLServiceID INT, @PLItemID INT
SELECT @HFID = HFId FROM tblClaimAdmin WHERE ClaimAdminCode = @ClaimAdminCode AND ValidityTo IS NULL
SELECT @PLServiceID = PLServiceID FROM tblHF Where HFid = @HFID
SELECT @PLItemID = PLItemID FROM tblHF Where HFid = @HFID我把这个放到LINQ上
int? HFID;
int? PLServiceID;
int? PLItemID;
HFID = context.TblClaimAdmin
.Where(c => c.ClaimAdminCode == model.claim_administrator_code && c.ValidityTo == null)
.Select(x => x.Hfid).FirstOrDefault();
PLServiceID = context.TblHf
.Where(h => h.HfId == HFID)
.Select(x => x.PlserviceId).FirstOrDefault();
PLItemID = context.TblHf
.Where(h => h.HfId == HFID)
.Select(x => x.PlitemId).FirstOrDefault();以前,只有一个对数据库的查询。
现在我有3个
它在现实中是如何工作的?是不是慢了很多?
它能造得更好吗?
发布于 2019-06-12 14:35:09
它会更慢,是的(可能不是那么一致),因为你有更多的往返。将其转换为具有3个OUT参数的UNION或存储过程。然后你就可以在一台电脑上实现它。
就我个人而言,我会使用SP。SQL to Linq的问题真的让我很恼火:)已经有了一个解决方案,但是让我们通过使用Linq来使它“更好”
发布于 2019-06-12 21:02:28
对FirstOrDefault()的调用确实执行了对数据库的查询,因此您正在执行三个单独的查询。
如果你担心避免性能,你应该检查数据库的索引和统计。使用Linq或其他ORM有时执行的查询并不是您所能想到的,因为ORM确实在幕后解释查询并执行它的SQL。
您很可能应该执行一个查询,而不是执行三个单独的查询,例如:
from ca in context.TblClaimAdmin
join hf in context.TblHf on ca.Hfid equals hf.Hfid
where
ca.ClaimAdminCode == model.claim_administrator_code
&& ca.ValidityTo == null
select new {
ca.Hfid,
hf.PlserviceId,
hf.PlitemId
}https://stackoverflow.com/questions/56555902
复制相似问题