Цепочка LINQ IQueryable и заканчивается хранимой процедурой - PullRequest
1 голос
/ 24 мая 2010

Я формирую критерии поиска в своем приложении с помощью методов расширения IQueryable, например:

public static IQueryable<Fish> AtAge (this IQueryable<Fish> fish, Int32 age)
{ 
    return fish.Where(f => f.Age == age);
}

Однако у меня также есть хранимая процедура полнотекстового поиска:

CREATE PROCEDURE [dbo].[Fishes_FullTextSearch]
@searchtext nvarchar(4000),
@limitcount int
AS
SELECT Fishes.* FROM Fishes
  INNER JOIN CONTAINSTABLE(Fishes, *, @searchtext, @limitcount)
  AS KEY_TBL ON Fishes.Id = KEY_TBL.[KEY]
  ORDER BY KEY_TBL.[Rank]

Хранимая процедура, очевидно, не возвращает IQueryable, однако возможно ли каким-то образом ограничить набор результатов для хранимой процедуры, используя IQueryable?

Я предполагаю что-то вроде .AtAge (5) .AboveWeight (100).Fishes_FulltextSearch ("abc").

В этом случае полнотекстовый поиск должен выполняться в меньшем подмножестве моей таблицы Fishes (суженное по возрасту и весу).

Возможно ли что-то подобное?Пример кода?

Ответы [ 2 ]

0 голосов
/ 24 мая 2010

Если вы можете использовать ContainsTable в представлении, -that- возвращает IQueryable ...

0 голосов
/ 24 мая 2010

Я думаю, что это может сработать, если вы

  • создадите другой метод расширения для Fishes_FulltextSearch("abc")
  • внутри него, вы вставите набор результатов методов previos (AtAge и AboveWeight)) к временной таблице
  • работа с этой временной таблицей внутри хранимой процедуры
  • возврат из хранимой процедуры нужного набора результатов
  • и возврат из нового метода расширения результатанабор хранимой процедуры.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...