使用自定义表达式构建Nhibernate子句

时间:2017-08-10 14:49:16

标签: c# linq nhibernate

我一直在尝试创建一个Expression来放置我的where子句。

因为我不能直接返回一个Func(因为nhibernate不能用它来转换成sql)我试图返回一个表达式>

要做到这一点,我已经尝试进入更深层......直接使用表达式

但是......我一直在寻找,没有任何解决方案......任何人都可以帮助我吗?

以下是代码:

private static void Teste()
{
    var repo = new Repository<ViewRelatorioOrdemServico>(MockDevDatabase.CurrentSession()).Queryable();
    var filtro = DateTime.Now.AddDays(-15);
    repo = repo.Where(FilterDateDe(x => x.DataCriacao.Value, filtro));
    foreach (var item in repo)
    {
        Console.WriteLine(item.NumeroOS);
    }
}

public static Expression<Func<ViewRelatorioOrdemServico, bool>> FilterDateDe(Expression<Func<ViewRelatorioOrdemServico, DateTime>> exp, DateTime dataDe)
{
    var right = Expression.Constant(dataDe, typeof(DateTime));            
    return Expression.GreaterThanOrEqual(exp, right);
}

我的问题是......如何创建我的表达式&gt;

我一直在尝试很多不同的方法......找到了一些框架来做到这一点......但我正在努力避免这些...并实现我自己的解决方案。

这些用于学术目的

1 个答案:

答案 0 :(得分:2)

感谢那些帮助过的人,特别感谢Ivan !!!

最终答案是以下代码:L

public static Expression<Func<ViewRelatorioOrdemServico, bool>> FilterDateDe(Expression<Func<ViewRelatorioOrdemServico, DateTime>> exp, DateTime dataDe)
{
    var right = Expression.Constant(dataDe, typeof(DateTime));
    return Expression.Lambda<Func<ViewRelatorioOrdemServico, bool>>(Expression.GreaterThanOrEqual(exp.Body, right), exp.Parameters);
}

之后,我可以使用语法并制作一些高级强类型过滤器!

谢谢!