【发布时间】:2014-03-20 14:11:01
【问题描述】:
这是我的情况,我想使用通用存储库来查询数据,代码如下:
public T SingleOrDefault(Expression<Func<T, bool>> filter)
{
return Transact(() => session.QueryOver<T>().Where(filter).List().FirstOrDefault());
}
protected virtual TResult Transact<TResult>(Antlr.Runtime.Misc.Func<TResult> func)
{
try
{
if (!session.Transaction.IsActive)
{
TResult result;
using (var tr = session.BeginTransaction())
{
result = func.Invoke();
tr.Commit();
}
return result;
}
return func.Invoke();
}
catch (Exception e)
{
Log.Error(e);
throw new Exception(e.Message);
}
}
但是当我使用如下方法时:
Expression<Func<User,bool>> filter = user => String.Compare(user.Name, “TommyLike”, System.StringComparison.OrdinalIgnoreCase) == 0;
var result = _kernel.Get<IReposity<User>>.SingleOrDefault(filter)
似乎无法识别过滤器中的var用户,但是当我将过滤器更改为:
filter = user => user.Name == "TommyLike"
它运行正常,有谁知道它在第一次尝试时如何不起作用?以及如何解决问题?
【问题讨论】:
标签: c# generics nhibernate ninject queryover