У меня есть следующая хранимая процедура, которую я пытаюсь преобразовать в запрос 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» не может быть преобразован вдопустимый тип или функция.