2016-12-02 4 views
-7

У меня есть следующий запрос:Получить все вместо FirstOrDefault

PromotionList dataPromotion = authenticateCustomerResponseRootObject.Response 
    .AuthenticateCustomerResponse.EligiblePromotions.PromotionList 
    .Where(p => p.LineOfBusiness.ToUpper().Equals("DATA")) 
    .FirstOrDefault(); 

PromotionList Мои содержит 3 объекта, с LineOfBusinessData, Video и третий объект содержит Data тоже. Выше запроса возвращает PromotionList первого объекта, тогда как я хочу ВСЕ, чей LineOfBusiness равен Data. Почему это происходит?

+9

Поскольку последний метод в запросе '.FirstOrDefault()'? –

+2

Uhm, если вы хотите * все * объекты, то почему вы попросили 'FirstOrDefault()' then? Удалите этот звонок, не то, что вы хотите ??? –

+0

Euhm. Потому что вы явно используете 'FirstOrDefault'? –

ответ

2

Вы используете FirstOrDefault, так что вы возвращаете First.

PromotionList dataPromotion = authenticateCustomerResponseRootObject.Response.AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Where(p => p.LineOfBusiness.ToUpper().Equals("Data")).FirstOrDefault(); 

Если вы хотите, чтобы все из них просто удалить этот вызов в то конец и заменить ToList, ToArray или аналогичный, который отвечает вашим потребностям:

var data = authenticateCustomerResponseRootObject.Response.AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Where(p => p.LineOfBusiness.ToUpper().Equals("Data")).ToList(); 

Кроме того, как указано в комментариях свой Where звонок использует ToUpper, а затем сравнивает символы, содержащие символы нижнего регистра, поэтому никогда не вернет никаких результатов. Вы либо должны удалить ToUpper, используйте верхнюю строку случая или даже использовать игнорировать случай:

Where(p => p.LineOfBusiness.Equals("Data", StringComparison.OrdinalIgnoreCase))