Сделайте, чтобы sql where определял приоритет одного префиксного поиска над другим - PullRequest
0 голосов
/ 12 октября 2010

У меня есть таблица sql с некоторыми столбцами nvarchar, давайте назовем их «Заголовок» и «Значение».

В настоящее время я использую запрос 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)

, что несколько работает, но допустим, я хочу расставить приоритеты в столбце «Значение» над столбцом «Заголовок». т.е. если ограничение _item.Value.StartsWith возвращает 100 результатов, возвращаются только те. Если он возвращает 25 результатов, остальные 75 заполняются из ограничения «Заголовок».

Я мог бы сделать это, используя несколько запросов, но это могло бы заполнить мой набор результатов повторяющимися записями.

Можно ли это сделать в linqtosql или мне нужно вручную написать SQL-запрос, чтобы это исправить? В любом случае, как это можно сделать?

1 Ответ

2 голосов
/ 12 октября 2010

Можете ли вы добавить ORDER BY?(Не знаю, как это сделать в linq)

ORDER BY CASE WHEN [t0].[Value] LIKE @p1 THEN 0 ELSE 1 END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...