Linq to Nhibernate - Where子句

时间:2009-10-02 18:42:21

标签: nhibernate linq-to-nhibernate

我试图找到答案,但在谷歌中找不到答案。可能不会搜索正确的术语,所以我想在这里问。

以下内容将返回我的所有联系人,而不是那些与发送的adjusterType相同的联系人。

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

以下确实会返回预期结果。它确实只返回符合adjusterType的联系人。我相信这是我对LINQ缺乏了解。

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

Where子句在您的情况下返回一个IEnumerable IEnumerable。这是标准的LiNQ和C#行为。它不是修改你的集合,而是根据你的where子句返回一个新的集合。

我认为NHibernate LiNQ应该模仿这个。

答案 1 :(得分:2)

CatZ是绝对正确的,你没有修改“contacts”集合/枚举你正在创建一个基于现有的新集合,这就是你的第二个声明有效的原因。

但不仅仅是重复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);