C#Lambda表达式和NHibernate

时间:2008-12-04 16:38:07

标签: c# nhibernate lambda

我是NHibernate这个伟大世界的新手。我使用的是2.0.1.GA版。这是我的问题。我有一个表Cars,其中包含列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<Car>()
    .Add(c => c.Manufacturer, Restrictions.Like("Mercedes")
    .List();

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

5 个答案:

答案 0 :(得分:9)

就像谷歌忍者所说,你可以用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配合使用(我认为,不确定特定版本)。

答案 1 :(得分:6)

答案 2 :(得分:4)

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

答案 3 :(得分:1)

看看this question here。有人有同样的担心,从我可以收集到的,NHibernate.Linq还活着。

答案 4 :(得分:1)

您可以找到所需内容here (blog entry)here (google repository)