使用自定义表达式生成 Nhibernate 子句



我一直在尝试创建一个表达式来放在我的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);
}

我的问题是...如何创建我的表达式>

我一直在尝试很多不同的方法...找到了一些框架来做到这一点..但我试图避免那些...并为此实施我自己的解决方案。

这些是出于学术目的

感谢那些帮助过的人,特别是伊万·!!

最终答案是以下代码: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);
}

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

谢谢!!

最新更新