C#Lambda表达式和NHibernate
我是NHibernate的伟大世界的新手。我正在使用版本2.0.1.GA.这是我的问题。我有一个表Cars
列Manufacturer(nvarchar(50))
和主键ID(int)
。我的.NET类:C#Lambda表达式和NHibernate
public class Car
{
public virtual int ID { get; set; }
public virtual string Manufacturer { get; set; }
}
现在,如果我想要检索梅赛德斯所做的所有车我必须键入:
using (var session = OpenSession())
{
var cars = session
.CreateCriteria(typeof(Car))
.Add(Restrictions.Like("Manufacturer", "Mercedes"))
.List();
// ...
}
我不喜欢的事实,我需要指定属性名作为一个字符串:( 是否有可能有一些更多的重构大概友好的(这只是一个建议)?
var ms = session
.CreateCriteria<Car>()
.Add(c => c.Manufacturer, Restrictions.Like("Mercedes")
.List();
任何像在当前版本(2.0.1.GA)变薄或在浮图重新版本?
就像谷歌忍者说的,你可以用NHibernate.Linq做到。 查询将被:
session.Linq<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()
如果有人在这里结束,并使用NH3.0语法只是一个(您的建议感谢Michael Mrozek和Mike)不同点点:
session.Query<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()
我已经使用了一个与fluent-nhibernate捆绑在一起的二进制文件,它与2.0GA(我认为,不确定特定的修订版)一起工作。
你可以用NHibernate.Linq来做到这一点。它是可用的形式,但仍然是完成的一种方式。它目前生活在内部nhcontrib,唯一的办法就是把它从svn这里拉出来https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/
如果你不想使用LINQ的NHibernate的是,有一对夫妇的替代品,以获得强类型条件查询:
谢谢,没有我头顶的语法,+1 – 2008-12-04 21:54:04
我可能会观察到“like”和“equals”不会产生相同的结果。我最近尝试(不是很难)在NHibnate.Linq中找到一种“喜欢”的方法。我放弃了,而是使用了ICriteria。 – 2008-12-06 15:27:07