0
我一直試圖創建一個表達式來放在我的where子句中。使用自定義表達式構建Nhibernate子句
既然不能直接返回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);
}
我的問題是...如何創建自己的表情>
我一直想不同的方式很多...發現了一些框架,這樣做..但我試圖避免這些......並實施我自己的解決方案。
這些是學術用途
爲什麼不直接使用表達式?我的意思是:'query.Where(x => x.DataCriacao.HasValue && x.DataCriacao.Value> = filtro);'。或者你需要動態的東西? –
我需要它的動態...我有一些地方,我喜歡... 16日期過濾器...我想保持乾淨。順便說一句,我看到很多地方與您的評論類似的話題..哈哈。 – 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);' –