我试图找到答案,但在谷歌中找不到答案。可能不会搜索正确的术语,所以我想在这里问。
以下内容将返回我的所有联系人,而不是那些与发送的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);
提前致谢。
答案 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);