Я довольно новичок в linq и хотел немного углубиться в расширение IQueryable. Я хочу создать простой метод расширения, который запрашивает диапазон дат. Что-то, что будет эквивалентно:Расширение IQueryable и разбор свойств
IQuerable.Where(x => x.Date > fromDate && x.Date < toDate);
но с некоторой дополнительной обработкой на даты. Я хочу, чтобы иметь возможность анализировать свойства для выполнения запроса, так что вызов метода будет что-то вроде:
IQueryable.WhereDateRange(x => x.Date, fromDate, toDate);
IQueryable.WhereDateRange(x => x.AnotherDate, fromDate, toDate);
Я смотрел на то, как показано ниже, но я не совсем уверен, что я делаю
public static IQueryable<T> WhereDateRange<T>(this IQueryable<T> source, Func<T, DateTime> getter, DateTime from, DateTime to) {
//query here
}
Возможно ли это, и если да, то как это сделать?
Другое примечание: это будет работать только на внешнем большинстве IQueryable, если вы используете это внутри подзапроса в linq для sql или структуры сущности, оно не будет работать, поскольку провайдеры не знают, как перевести этот метод. вам нужно сделать некоторые причудливые трюки для этого, чтобы работать –
@Roger все, что вы можете сделать с синтаксисом запроса, также можно сделать вручную, в конечном счете –
вы действительно можете поддерживать вышеуказанные методы в подзапросах, не заменяя всех других методов, таких как select, где или обертывание IQueryable? –