Линк Ниберат - Где пункт - PullRequest
1 голос
/ 02 октября 2009

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

Следующее возвращает все мои контакты, а не те, которые соответствуют отправленному AdjustterType.

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

Следующее возвращает ожидаемые результаты. Он возвращает только те контакты, которые соответствуют AdjustType. Я считаю, что это мое непонимание LINQ.

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

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

Ответы [ 2 ]

2 голосов
/ 02 октября 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);
2 голосов
/ 02 октября 2009

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

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

...