我一直在尝试创建一个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;
我一直在尝试很多不同的方法......找到了一些框架来做到这一点......但我正在努力避免这些...并实现我自己的解决方案。
这些用于学术目的
答案 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);
}
之后,我可以使用语法并制作一些高级强类型过滤器!
谢谢!