EF Code First: методы, которые можно преобразовать в SQL

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

6
задан Community 23 May 2017 в 10:34
поделиться