2008-12-04 197 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是活着的。