2009-10-02 2 views
1

Я попытался найти ответ на этот вопрос, но не смог найти его в google. Наверное, не поиск правильных терминов, поэтому подумал, что я попрошу здесь.Linq to Nhiberate - где статья

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

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

ответ

2

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

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

2

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); 
Смежные вопросы