首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL转换为LINQ - efficiency

SQL转换为LINQ - efficiency
EN

Stack Overflow用户
提问于 2019-06-12 14:30:32
回答 2查看 74关注 0票数 1

我有这样一个SQL (片段)

代码语言:javascript
复制
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上

代码语言:javascript
复制
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个

它在现实中是如何工作的?是不是慢了很多?

它能造得更好吗?

EN

回答 2

Stack Overflow用户

发布于 2019-06-12 14:35:09

它会更慢,是的(可能不是那么一致),因为你有更多的往返。将其转换为具有3个OUT参数的UNION或存储过程。然后你就可以在一台电脑上实现它。

就我个人而言,我会使用SP。SQL to Linq的问题真的让我很恼火:)已经有了一个解决方案,但是让我们通过使用Linq来使它“更好”

票数 1
EN

Stack Overflow用户

发布于 2019-06-12 21:02:28

FirstOrDefault()的调用确实执行了对数据库的查询,因此您正在执行三个单独的查询。

如果你担心避免性能,你应该检查数据库的索引和统计。使用Linq或其他ORM有时执行的查询并不是您所能想到的,因为ORM确实在幕后解释查询并执行它的SQL。

您很可能应该执行一个查询,而不是执行三个单独的查询,例如:

代码语言:javascript
复制
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 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56555902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档