gpt4 book ai didi

c# - sql 正常工作时,Linq 查询不工作

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:57 24 4
gpt4 key购买 nike

我正在将一些 SQL 查询转换为 Linq( Entity Framework )。大多数查询都运行良好,但我在以下查询中遇到的问题很小。

当我在 SQL Server Management Studio 中尝试此查询时,它返回多条记录。

SELECT
bDrillDown,
Icon
FROM
dbo.Checklist
INNER JOIN
dbo.Codes ON Checklist.iCodeID = Codes.iCodeID
AND Codes.bDeleted = 0 AND Codes.bObsolete = 0
INNER JOIN
dbo.CodeGroup ON Codes.iGroupID = CodeGroup.iGroupID
AND CodeGroup.bDeleted = 0 AND CodeGroup.bInspection = 1
INNER JOIN
dbo.CodeInspectionTypeV ON Cast(LEFT(Checklist.LongKey, 6) as int) = CodeInspectionTypeV.InspectionTypeID
WHERE
Checklist.bDeleted = 0
ORDER BY
iChecklistID

当我将它转换为 LINQ 查询时:

var checkList = from checklist in db.Checklists
join code in db.Codes on checklist.iCodeID equals code.iCodeID
where code.bDeleted == false && code.bObsolete == false
join codeGroup in db.CodeGroups on code.iGroupID equals codeGroup.iGroupID
where codeGroup.bDeleted == false && codeGroup.bInspection == true
join codeInspectionType in db.CodeInspectionTypeVs on checklist.LongKey.Substring(0, 6) equals codeInspectionType.InspectionTypeID.ToString()
where checklist.bDeleted == false
orderby checklist.iChecklistID
select new
{
checklist.iChecklistID,
InspectionTypeID = checklist.LongKey.Substring(0, 6).ToString()
};

它不返回任何记录,只返回一个空数组。

最佳答案

问题显然出在以下连接条件

on checklist.LongKey.Substring(0, 6) equals
codeInspectionType.InspectionTypeID.ToString()

这不等同于 SQL 查询。

不幸的是,EF 不支持字符串到数字数据的转换,因此您的尝试很好,但是当字符串值包含前导零时(如您的情况),它不起作用。

要使其正常工作,您需要用零填充 codeInspectionType.InspectionTypeID.ToString() 的结果,这可以通过使用(至少在最新的 EF6.1.3 中)完成DbFunctions.Right规范函数(类似于 how to sort varchar column containing numeric values with linq lambdas to Entity ):

on checklist.LongKey.Substring(0, 6) equals 
DbFunctions.Right("00000" + codeInspectionType.InspectionTypeID, 6)

关于c# - sql 正常工作时,Linq 查询不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37907436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com