LINQ to Entities Преобразование хранимой процедуры в L2E-запрос - PullRequest
0 голосов
/ 10 марта 2011

У меня есть следующая хранимая процедура, которую я пытаюсь преобразовать в запрос LINQ to Entities:

SELECT
    SR.*,
    F.*
FROM
    Users AS U,
    UsersToClients AS UM,
    Filings AS F,
    Records AS SR
    LEFT OUTER JOIN RecordsMappings AS MAP ON
        MAP.[MappingID] = SR.[MappingID]
WHERE
    UM.[ClientID] = @clientID AND
    U.[Username] LIKE UM.[Username] AND
    U.[Deleted] = 0 AND
    F.[Username] LIKE U.[Username] AND
    SR.[FilingID] = F.[FilingID] AND
    SR.[RecordType] = @recordType AND
    SR.[ClientID] = @clientID AND
    dbo.uf_Record_IsValuable(SR.[RecordID], 0) = 1

У меня есть следующий запрос, который почти в точности соответствует тому, что происходит в хранимой процедуре:

var records =
    from sr in context.SecuritiesRecords
    from u in context.Users
    from um in context.UsersToClients
    from f in context.Filings
    where
        um.ClientID == clientID &&
        String.Compare(u.Username, um.Username, true) == 0 &&
        !u.Deleted &&
        String.Compare(u.Username, f.Username, true) == 0 &&
        sr.FilingID == f.FilingID &&
        sr.RecordType == recordType &&
        sr.ClientID == um.ClientID
    select sr;

Проблема возникает с последним предложением WHERE из хранимого процесса, который является вызовом пользовательской функции, которая отфильтровывает записи на основе группы условной логики.Я не хотел вызывать хранимый процесс из L2E, потому что я буду добавлять дополнительные операторы where для фильтрации данных, и сохраненный процесс может вытянуть много записей, которые я затем записал бы в память на конце LINQ.

Какие у меня есть варианты?

РЕДАКТИРОВАТЬ:

Я успешно создал функцию, определенную моделью, со следующими данными:

<DefiningExpression>
    1
</DefiningExpression>

Но когда я пытаюсь вставить свой UDF в определяющее выражение (я также добавил его в модель) следующим образом:

<DefiningExpression>
    uf_Record_IsValuable(100, 0)
</DefiningExpression>

я получаю следующую ошибку: «uf_Record_IsValuable» не может быть преобразован вдопустимый тип или функция.

1 Ответ

0 голосов
/ 10 марта 2011
...