因为这是更大的SQL SELECT语句的一部分,所以我想要一个完整的SQL查询来选择匹配条件的第一个项目,或者,如果没有项目符合条件,则只需要第一个项目。
即。使用Linq我想:
Dim t1 = From t In Tt
Dim t2 = From t In t1 Where Criteria(t)
Dim firstIfAny = From t In If(t2.Any, t2, t1) Take 1 Select t
因为If
不是Linq的一部分,所以LinqPad不显示单个SQL语句,而是显示两个,第二个取决于Criteria
是否匹配任何Tt
值。
我知道它会是SELECT TOP 1
等等我可以添加ORDER BY
条款来获取我想要的特定第一个条款,但是我无法想到获得第一个最直接的方法两个标准。 (正是在我能够自己解决这个问题的时候。)
看到我没有看到现有的问题,我会让它成立。我相信其他人会很快看到答案。
答案 0 :(得分:2)
select top 1 *
from (
select top 1 *, 1 as Rank from MyTable where SomeColumn = MyCriteria
union all
select top 1 *, 2 as Rank from MyTable order by MyOrderColumn
) a
order by Rank
答案 1 :(得分:1)
我已经离开了:
SELECT TOP 1 *
FROM MyTable
WHERE SomeColumn = MyCriteria
OR NOT (EXISTS (SELECT NULL FROM MyTable WHERE SomeColumn = MyCriteria))
ORDER BY MyOrdering
我的实际SomeColumn = MyCriteria
当然要复杂得多,以及其他无关的where子句。