我有简单的接口:
public interface IValid
{
DateTime From {get;set;}
DateTime? To {get;set;}
}
我希望有可能写出这样简单的表达式:
dbContext.SomeClass
.WhereValidOnDate(DateTime.Today)
.Where(x=> ...more_expressions...)
.ToList();
我认为,我需要编写一些带方法签名的类:
public static IQueryable<TSource> WhereValidOnDate<TSource>(this
IQueryable<TSource> source)
在该方法中,我需要进行一些简单的数据比较(硬编码),例如:
x => x.From<= DateTime.Today && (x.To == null || x.To <= DateTime.Today
我尝试过表达式树 - 但是语法更麻烦:
dbContext.SomeClass
.Where(IsValidExpression)
.Cast<SomeClass>()
.Where(x=> ...more_expressions...)
.ToList();
答案 0 :(得分:4)
尝试此签名和实现:
public static IQueryable<T> WhereValidOnDate<T>(this IQueryable<T> source, DateTime other)
where T : IValid
{
return source.Where(x => x.From<= other && (x.To == null || x.To <= DateTime.Today));
}