c# - 自定义 Where 表达式

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

最佳答案

试试这个签名和实现:

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

关于c# - 自定义 Where 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20123983/

相关文章:

nhibernate - 知道子集合计数而不用在 NHIbernate 中加载它们

c# - 存储更新、插入或删除语句影响了意外的行数 (0) EntityFramework

c# - XSLT 转换不返回任何内容

javascript - UpdatePanel 触发时图像不显示

c# - 如何创建线程?

c# - Linq 选择列表中存在的对象(A,B,C)

c# - Dictionary<Foo, List<Bar>> 如何使用 LINQ 将列表分配给键的属性?

asp.net - nHibernate 使用 Log4Net 进行日志记录,线程 session 问题

c# - 从 Linq 表达式中获取参数值

WCF 和 Fluent NHibernate : how can i keep "clean" classes?