Я ищу способ создать функцию, которую можно было бы использовать в моих запросах Linq, которые будут транслироваться в SQL. Когда мы использовали Linq-to-SQL, я задал аналогичный вопрос. Ответ заключался в том, чтобы сопоставить UDF в базе данных. Мы используем первую модель кода из-за чистоты определения модели, но, к сожалению, нет способа определить функции, сопоставить с функциями и сопоставить с хранимыми процессами, насколько я могу судить (я думаю, идея в том, что код сначала должен генерировать БД, и я не должен добавлять к ней что-то).Мне кажется, что это не очень масштабируемо, так как это не дает простого метода борьбы с неэффективностью, которая может развиваться со временем, но это ни здесь, ни там...
В любом случае, я знаю, что могу определить предикатные выражения, которые будут перевести на SQL, который я могу использовать в своих запросах, например:
public static Expression> FilterMe(int comparisonNumber)
{
return x => x.SomeProperty == comparisonNumber;
}
var query = MyEntities.Where(FilterMe(1));
Возможно ли это только для выражений, возвращающих bool
? Я ищу что-то вроде:
var query = from m in MyEntities
let endDate = GetEndDate(m.Start, m.Duration)
where endDate <= DateTime.Now
select m;
Есть ли способ построить GetEndDate
в функции-выражении? Код внутри GetEndDate
прекрасно транслируется в SQL, когда я пишу его в запросе от руки, но он довольно длинный и запутанный для чтения.
Изменить. О, и прежде чем кто-то ответит «Использовать SQLFunctions для DateAdd», мой пример — это просто пример. Есть бесчисленное множество других способов, которыми я хотел бы использовать это. Заранее спасибо.