0

我在将包含 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%") 
4

2 回答 2

1

可以使用 Contains() 或 Any() 关键字处理子查询,但性能可能很差,具体取决于您的提供者。

于 2012-06-11T14:34:45.420 回答
0

Linq-To-SQL 中 LIKE 的等价物是 Contains、StartsWith、EndsWith。L2S 将它们转换为等效的 LIKE 语句。

在此处查看类似问题如何在 Linq 中执行 SQL Like %?

编辑:

您可能能够获得与原始子查询完全相同的结果,使用

Any(pr=>pr.prioid.StartsWith("1")

如果 p 是 Persons 集中的一个对象,你可以写一些东西

Persons.Any(pr=>pr.prioid.StartsWith("1"))

我不确定 L2S 是否可以翻译此内容或生成的 SQL 将如何执行。

于 2012-06-11T14:27:59.567 回答