将一个Func委托转换为另一个Func委托以用于通用存储库

时间:2012-06-13 15:06:21

标签: nhibernate lambda repository-pattern func

我的目标是实现这样的目标:

IList<People> peeps = _peopleRepository.Get<People>(x.Name == "dan");   
//signature looks like this:  IList<T> Get<T>(Func<T, bool> query) where T : IEntity;

这将在内部完成:

_sessionFactory.GetCurrentSession().QueryOver<People>(x.Name=="dan").List();
//NHibernate.IQueryOver<T,T> QueryOver<T>(System.Linq.Expressions.Expression<Func<T>> alias)
where T : class

我遇到的问题是将“查询”转换为“别名”,因为类型明显不同。这是徒劳的任务吗?有没有实现我的目标?

1 个答案:

答案 0 :(得分:0)

虽然我不使用NHibernate,但似乎你的类型签名是不同的。您的Get方法应该接受System.Linq.Expressions.Expression<Func<T, bool>>类型的参数。这样您就可以将它传递给QueryOver方法,该方法接受相同类型的参数。