自定义Where表达式

时间:2013-11-21 14:44:35

标签: c# linq nhibernate lambda linq-to-nhibernate

我有简单的接口:

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();

1 个答案:

答案 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));
}