SQL转换为LINQ-效率

时间:2019-06-12 06:30:32

标签: c# linq

我有这样的SQL(片段)

s -> { return /*your data type*/; }

我把它放在LINQ上

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

以前,只有一个查询到数据库。

现在我有3

它在现实中如何运作?慢很多吗?

可以建造得更好吗?

2 个答案:

答案 0 :(得分:1)

这会比较慢,是的(可能不一致),因为往返次数更多。将其转换为UNION或带有3个OUT参数的存储过程。然后,您可以一并实现。

我个人使用SP。 SQL到Linq的问题确实让我很烦:)已经有一个解决方案,但是通过使用Linq

让它“更好”

答案 1 :(得分:0)

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 
}