使sql where子句将一个类似前缀的搜索优先于另一个

时间:2010-10-12 15:04:06

标签: sql sql-server linq-to-sql sql-server-2008

我有一个带有一些nvarchar列的sql表,我们称之为'Title'和'Value'。

我目前使用linqtosql查询进行前缀搜索以查找此表中的行,如此

var result = from _item in GetTable()
    where _item.Title.StartsWith( "hello" ) || _item.Value.StartsWith( "hello" )
    select _item;
return result.Take( 100 );

生成相应的sql:

@p0=N'hello%'
@p1=N'hello%'
SELECT TOP (100) *
FROM [Table] AS [t0]
WHERE ([t0].[Title] LIKE @p0) OR ([t0].[Value] LIKE @p1)

在某种程度上有效,但是我想说我想在Title列上优先考虑Value列。即如果_item.Value.StartsWith约束返回100个结果,则只返回那些结果。如果它返回25个结果,则剩余的75个将从“标题”约束中填充。

我可以使用多个查询来完成它,但这可以用重复的条目填充我的结果集。

这可以在linqtosql中完成,还是我必须手动编写一个sql查询来修复它?无论哪种情况,怎么办?

1 个答案:

答案 0 :(得分:2)

你能加ORDER BY吗? (不知道怎么在linq中这样做)

ORDER BY CASE WHEN [t0].[Value] LIKE @p1 THEN 0 ELSE 1 END