2008-12-04 143 views
14

我是NHibernate的伟大世界的新手。我正在使用版本2.0.1.GA.这是我的问题。我有一个表CarsManufacturer(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)变薄或在浮图重新版本?

回答

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(我认为,不确定特定的修订版)一起工作。

+0

谢谢,没有我头顶的语法,+1 – 2008-12-04 21:54:04

+0

我可能会观察到“like”和“equals”不会产生相同的结果。我最近尝试(不是很难)在NHibnate.Linq中找到一种“喜欢”的方法。我放弃了,而是使用了ICriteria。 – 2008-12-06 15:27:07

1

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