Donc, je suis un peu fatigué de réécrire les mêmes requêtes encore et encore.Extension de IQueryable avec IsInDateTimeRange
repo.Query().Where(stuff => stuff.Timestamp >= minTime && stuff.Timestamp <= maxTime && ...);
Je pensais que je devrais étendre IQueryable
avec une méthode appelée IsInDateTimeRange
, et l'utiliser comme ceci
repo.Query().IsInDateTimeRange(stuff => stuff.Timestamp, minTime, maxTime) ...
ce serait très facile pour IEnumerable
, à Func<T, DateTime>
et deux DateTime
s, mais pour la IQueryable
Je dois prendre un Expression
et je ne sais pas trop comment l'utiliser.
C'était ma tentative, mais ne semble pas fonctionner.
public static IQueryable<TValue> IsInDateTimeRange<TValue>(
this IQueryable<TValue> self,
Expression<Func<TValue, DateTime>> getMember,
DateTime minTime,
DateTime maxTime)
{
return self.Where(value => minTime >= getMember(value) && maxTime <= getMember(value));
}
Quand vous dites ne fonctionne pas s'il vous plaît expliquer ce que cela signifie. Exception? Erreur de compilation? .. –
La plupart des fournisseurs Linq ne pourraient pas traduire votre expression transformée en une requête de magasin à cause de ce bruit 'getMember (value)'. Vous devrez remplacer manuellement les parties concernées par un accesseur 'Expression.Property'. – haim770
Oui, erreur du compilateur. Impossible d'appeler getMember car ce n'est pas un délégué. – jool