Nhibernate Linq至Nhiberate-Where条款

Nhibernate Linq至Nhiberate-Where条款,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我试图找到一个答案,但在谷歌上找不到。可能没有搜索正确的术语,所以我想在这里问一下 下面返回我的所有联系人,而不是与发送的adjusterType相同的联系人 var contacts = from c in session.Linq<Contact>() select c; contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType); 以下内容确实返回了预期的结果。它只返回符合调整器类型的触点。我相

我试图找到一个答案,但在谷歌上找不到。可能没有搜索正确的术语,所以我想在这里问一下

下面返回我的所有联系人,而不是与发送的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);

提前感谢。

Where子句在您的案例中返回IEnumerable。这是标准的LiNQ和C行为。它不是修改集合,而是基于where子句返回新集合


我想NHibernate LiNQ应该模仿这一点。

Where子句在您的例子中返回IEnumerable。这是标准的LiNQ和C行为。它不是修改集合,而是基于where子句返回新集合


我认为NHibernate LiNQ应该模仿这一点。

CatZ绝对正确,您没有修改联系人集合/枚举,而是在现有的基础上创建一个新的联系人集合/枚举,这就是您的第二条语句工作的原因

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

CatZ是绝对正确的,您不是在修改contacts集合/枚举,而是在现有的基础上创建一个新的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);