0
私はwhere句を入れる式を作成しようとしています。カスタム式でNhibernate句を作成する
(NHibernateのは、SQLに変換するためにそれを使用することはできませんので)私が直接、私は式を返すようにしようとしているのFuncを返すことはできませんので>
それを行うには、私はに行くことを試みましたより深いレベル...式を直接使用する
しかし、私は何の解決策もなしに検索してきました。ここで
コードです:私の式を作成する方法を...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);
}
私の質問がある>
私はさまざまな方法の多くをしようとしてきた...それを行うには、いくつかのフレームワークを見つけました..しかし、私はそれらを避けようとしています...これに私自身の解決策を実装します。
これらは学術目的のためにイワンに、特別を助けた人のための
なぜ表現を直接使用しないのですか?私は 'query.Where(x => x.DataCriacao.HasValue && x.DataCriacao.Value> = filtro);'を意味します。それとも動的なものが必要なのでしょうか? –
私はそれを動的にする必要があります...私はいくつかの場所を持っている... 16の日付フィルタ...と私はそれをきれいに保ちたい。 Btw、私は似たような話題であなたのコメントとたくさんの場所を見た。 – Revista
['Expression.Lambda'](https://msdn.microsoft.com/en-us/library/system.linq.expressions.expression.lambda(v = vs.110).aspx)メソッドを見てください。 'Return Expression.Lambda>(Expression.GreaterThanOrEqual(exp.Body、right)、exp.Parameters);' –