我在将包含select语句的where子句转换为LINQ-to-SQL时遇到问题。这是SQL片段:
WHERE
(p.prioid IS NULL
OR p.prioid IN (SELECT prioid FROM mc.PRIORITY WITH (NOLOCK) WHERE prioid LIKE '1%' ))
AND s.id IN(@site)
AND (LTRIM(sv.glseg) IN ('703', '704', '705'))
AND (c.crewid IS NULL
OR c.crewid IN (SELECT crewid FROM mc.CREW WITH (NOLOCK) WHERE crewid NOT LIKE '2-%'
AND (crewid LIKE '%MAINT%'
OR crewid LIKE '%ELECT%'
OR crewid LIKE '%INST%')))
AND wot.id IN (SELECT id FROM mc.WORKORDERTYPE WITH (NOLOCK) WHERE id NOT LIKE '%Standing%')
具体来说,我遇到了麻烦:
WHERE
(p.prioid IS NULL
OR p.prioid IN (SELECT prioid FROM mc.PRIORITY WITH (NOLOCK) WHERE prioid LIKE '1%' ))
我将它翻译成以下LINQ语句,但我确定它不正确:
where (p.prioid = null || p.prioid == "1%")
答案 0 :(得分:1)
可以使用Contains()或Any()关键字处理子查询,但性能可能很差,具体取决于您的提供商。
答案 1 :(得分:0)
Linq-To-SQL中LIKE的等价物是Contains,StartsWith,EndsWith。 L2S将它们转换为等效的LIKE语句。
在此处检查类似问题How to do SQL Like % in Linq?
修改强>
您可以使用
获得与原始子查询完全相同的结果Any(pr=>pr.prioid.StartsWith("1")
如果p是人物集中的对象,你可以写一些东西
Persons.Any(PR => pr.prioid.StartsWith( “1”))
我不确定L2S是否可以转换此内容或生成的SQL将如何执行。