Как выполнить внутреннее присоединение к функции UDF с параметрами, используя SubSonic - PullRequest
1 голос
/ 04 мая 2009

Мне нужно запросить таблицу, используя FreeTextTable (потому что мне нужно ранжирование), с SubSonic. AFAIK, Subsonic не поддерживает FullText, поэтому я в итоге создал простую функцию UDF (Table Function), которая принимает 2 параметра (ключевые слова для поиска и максимальное количество результатов). Теперь, как я могу внутренне присоединиться к главной таблице с помощью этого FreeTextTable? InlineQuery не вариант. Пример:

таблица ARTICLE с полями Id, ArticleName, Author, ArticleStatus.

Поиск может быть выполнен одним из следующих полей: ArticleName (полный текст), Author (другой FullText, но с другими поисковыми ключевыми словами), ArticleStatus (int).

На самом деле запрос гораздо более сложный и имеет другие объединения (в зависимости от выбора пользователя).

Если SubSonic не может справиться с этой ситуацией, возможно, лучшим решением будет старый добрый простой sql (поэтому не нужно создавать UDF тоже).

Спасибо за вашу помощь

ps: SubSonic 3.0 справится с этой ситуацией?

Ответы [ 2 ]

0 голосов
/ 28 мая 2009

Я понимаю, что ваш вопрос более сложный, чем этот, но вы можете получить результаты из табличной функции через SubSonic 2.2 с небольшим массажем.

Скопируйте файл .cs из одного из созданных представлений в безопасную папку, а затем измените все свойства в соответствии со столбцами, возвращаемыми вашей UDF.

Затем в вашей коллекции добавьте метод конструктора с вашими параметрами и попросите его выполнить InlineQuery.

public partial class UDFSearchCollection
{
    public UDFSearchCollection(){}

    public UDFSearchCollection(string keyword, int maxResults)
    {
         UDFSearchCollection coll = new InlineQuery().ExecuteAsCollection<UDFSearchCollection>("select resultID, resultColumn from dbo.udfSearch(@keyword, @maxResults)",keyword,maxResults);
         coll.CopyTo(this);
         coll = null;
    }
}

public partial class UDFSearch : ReadOnlyRecord<UDFSearch>, IReadOnlyRecord
{
    //all the methods for read only record go here
    ...

}

Внутреннее соединение будет немного сложнее, потому что у объекта таблицы нет собственной коллекции параметров. Но это могло бы ...

0 голосов
/ 04 мая 2009

3.0 может сделать это для вас, но вам нужно будет создать шаблон для него, так как мы не обрабатываем функции (пока) из коробки. Я буду работать над этим в ближайшие недели - пока я не думаю, что 2.2 сделает это за вас.

...