Seb*_*Seb 3 linq nhibernate predicates
请原谅我,如果我有点不清楚,我刚刚开始使用NHibernate/LINQ/Lambda表达式,我实际上不确定要寻找什么...
我在过去的4到5年里一直在使用.NET 2.0,除了我自己之外没有机会进化,这就是我现在开始学习新技术的原因:)
我一直在阅读很多博客和帖子,并开始了一个个人的小项目,我尝试尽可能地使用Repository模式.
我现在处于以下情况:
我的Repository实现看起来像这样:
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>();
}
...
}
Run Code Online (Sandbox Code Playgroud)
所以在我的核心DLL中,我可以获得对我的存储库的引用,并执行以下操作:
IList<Person> people = myRepository.All().ToList();
Run Code Online (Sandbox Code Playgroud)
这看起来效果很好,它查询数据库并返回Person表中的所有行.
但是,现在我想要做的是添加谓词:
IList<Person> daves = myRepository.All().Where(p => p.Name == "Dave").ToList();
Run Code Online (Sandbox Code Playgroud)
这很好,但当然会发生的事情是NHibernate首先查询数据库以返回所有行,然后LINQ过滤结果只返回名称为"Dave"的结果.
我一直在寻找互联网,但我还没有找到如何实现这一点,我发现很多东西似乎已经过时了,例如,我经常看到调用NH session.Linq()方法,我看着我的dll,这种方法无处可寻......
如果有人能指出我正确的方向,也许还有一些例子,我会非常感激.
非常感谢你!
这很简单:
用途session.Query<T>():
public virtual IQueryable<T> All()
{
return Session.Query<T>();
}
Run Code Online (Sandbox Code Playgroud)
Query<T>是一个存在于命名空间中的扩展方法NHibernate.Linq.
session.Linq不再受支持.它是版本3之前的NHibernate的LINQ提供程序,已被替换为Query<T>.
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |