C#Lambda表达式和NHibernate

我是NHibernate这个伟大世界的新手。 我使用的是2.0.1.GA版。 这是我的问题。 我有一个带有Manufacturer(nvarchar(50))和一个主键ID(int) 。 我的.NET类是:

 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() .Add(c => c.Manufacturer, Restrictions.Like("Mercedes") .List(); 

在当前版本(2.0.1.GA)或未来版本中有什么类似的东西?

就像谷歌忍者所说,你可以用NHibernate.Linq做到这一点。 然后查询将是:

session.Linq.Where(c => c.Manufacturer == "Mercedes").ToList()

如果有人在这里结束并使用NH3.0,语法只是有点不同(感谢Michael Mrozek和Mike提出的建议):

session.Query.Where(c => c.Manufacturer == "Mercedes").ToList()

我使用了一个与fluent-nhibernate捆绑在一起的二进制文件,它与2.0GA一起使用(我认为,不确定特定版本)。

你可以用NHibernate.Linq做到这一点。 它是一种可用的forms,但仍然是一种完整的方式。 它目前居住在nhcontrib内部,获得它的唯一方法是将其从svn中取出来https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/

看看这个问题 。 有人有同样的担心,从我可以收集到,NHibernate.Linq还活着。

你可以在这里找到你想要的东西(博客条目)或这里(谷歌存储库)