请原谅我,如果我有些不清楚,我刚开始使用NHibernate的/ LINQ/Lambda表达式,而我其实不确定该怎么找...NHibernate的使用LINQ(谓词?)
我在过去的4年或5年里,我一直在使用.NET 2.0,除了自己以外没有机会发展,这就是为什么我现在正在学习新技术:)
我一直在阅读很多博客和帖子,并开始个人小项目,尽可能地尝试使用Repository模式。
我现在是在以下情况:
- MyProject.Core.dll:我有一个包含所有的业务逻辑,并设置IRepository合同这一核心组件。它对存储库的实际实现一无所知,它在运行时使用IoC进行解析,因此该核心dll没有提及NHibernate dll。
- MyProject.Data.NHibernate.dll:存储库的实现包含在此程序集中,该程序集具有对NHibernate dll的所有必需的引用。
我的仓库实施看起来是这样的:
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
...
public virtual IQueryable<T> All()
{
IList<T> entities = Session
.CreateCriteria(typeof(T))
.List<T>();
return entities.AsQueryable<T>();
}
...
}
所以在我的核心DLL我能到我的仓库参考,并做一些事情,如:
IList<Person> people = myRepository.All().ToList();
,似乎工作那么它会查询数据库并返回Person表中的所有行。
不过,现在我想要做的就是添加断言:
IList<Person> daves = myRepository.All().Where(p => p.Name == "Dave").ToList();
这工作得很好,但当然会发生什么是NHibernate的第一查询数据库返回的所有行,然后LINQ对结果进行过滤只返回名字是“戴夫”的人。
我一直在寻找遍布互联网,但我还没有找到如何实现这一点,我也发现很多似乎已经过时的事情,例如,我经常看到呼叫NH会议。林克( )方法,我看着我的所有DLL,这种方法是无处可寻...
如果任何人都可以指向我的正确方向,也许有一个小例子或什么的,我会非常感激。
非常感谢你!
是的!有用!!非常感谢你! :) – Seb 2012-02-23 16:07:22