2009-10-02 68 views
1

我試圖找到答案,但在google中找不到。可能沒有搜索正確的術語,所以我想在這裏問。Linq to Nhiberate - Where子句

下返回我的所有聯繫人,不就是等於在發送adjusterType的人。

var contacts = from c in session.Linq<Contact>() select c; 
contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType); 

下不會返回預期的結果。它確實只返回符合調整器類型的聯繫人。我相信這是我對LINQ缺乏瞭解。

var contacts = from c in session.Linq<Contact>() select c; 
contacts = contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType); 

在此先感謝。

回答

2

Where子句在你的情況下返回一個IEnumerable一個IEnumerable。這是標準的LiNQ和C#行爲。它不是修改你的集合,而是根據你的where子句返回一個新的集合。

我想NHibernate的LiNQ應該模仿這個。

2

CatZ是絕對正確的,你沒有修改「contacts」集合/ enumerable你創建一個新的基於現有的,這就是爲什麼你的第二個陳述的作品。但

,而不是人云亦云Catz公司聲明,這裏是一個小的附加:

您可以在一條語句寫這雖然

var contacts = 
    from c in session.Linq<Contact>() 
    where c.ContactAdjuster.AdjusterType == adjusterType 
    select c; 

或者乾脆

var contacts = session.Linq<Contact>().Where(c => c.ContactAdjuster.AdjusterType == adjusterType);