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
如果有人在这里结束并使用NH3.0,语法只是有点不同(感谢Michael Mrozek和Mike提出的建议):
session.Query
我使用了一个与fluent-nhibernate捆绑在一起的二进制文件,它与2.0GA一起使用(我认为,不确定特定版本)。
如果您还不想将Linq用于NHibernate,那么有两种方法可以获得强类型Criteria查询:
你可以用NHibernate.Linq做到这一点。 它是一种可用的forms,但仍然是一种完整的方式。 它目前居住在nhcontrib内部,获得它的唯一方法是将其从svn中取出来https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/
看看这个问题 。 有人有同样的担心,从我可以收集到,NHibernate.Linq还活着。
你可以在这里找到你想要的东西(博客条目)或这里(谷歌存储库)