Linq to Nhiberate - пункт Where

Я пытался найти ответ на этот вопрос, но не смог найти его в гугле. Вероятно, не искал правильные термины, поэтому подумал, что спрошу здесь.

Следующее возвращает все мои контакты, а не те, которые совпадают с отправленным 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);

Заранее спасибо.


person Chance Robertson    schedule 02.10.2009    source источник


Ответы (2)


предложение Where возвращает IEnumerable, в вашем случае - IEnumerable. Это стандартное поведение LiNQ и C #. Вместо изменения вашей коллекции он возвращает новую коллекцию на основе вашего предложения where.

Я полагаю, что NHibernate LiNQ должен имитировать это.

person mhenrixon    schedule 02.10.2009

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);
person veggerby    schedule 02.10.2009