Поиск во вложенном цикле Linq по одному конкретному элементу верхнего уровня, коллекции внутри коллекций - PullRequest
0 голосов
/ 20 июня 2019

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

Использование первого или значения по умолчанию 3 раза кажется неправильным.

> var company = cprIdentificationReply.Companies
>                    .FirstOrDefault(x => (x.Employee
>                    .FirstOrDefault(y => (y.IDCardIssued
>                    .FirstOrDefault(z => z.CardNumber
>                  .Equals(number,StringComparison.InvariantCultureIgnoreCase))) != null)
> != null));

Что может быть правильным способом достижения того же самого?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Возможно, вы захотите использовать метод расширения Any:

var companies = cprIdentificationReply.Companies
                                    .Where(x => (x.Employee
                                                  .Any(y => (y.IDCardIssued
                                                              .Any(z => z.CardNumber
              .Equals(number, StringComparison.InvariantCultureIgnoreCase)
                                                                  )
                                                      )
                                           ).ToList();
0 голосов
/ 20 июня 2019

Если вам нужен более красивый код, почему бы не использовать синтаксис запросов LINQ.Мне всегда легче читать запросы LINQ, когда смотрят на чужой код, особенно для сложных операций.

Примерно так:

var company = (from company in cprIdentificationReply.Companies
              from empl in company.Employee
              from idCardIss in empl .IDCardIssued
              where idCardIss.CardNumber.Equals(number, StringComparison.InvariantCultureIgnoreCase)
              select c).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...