RahulJha
RahulJha

Reputation: 63

Linq nested loop search one specific top level element , collection within collections

I want to get the company whose employees id card issued with the specific number, sort of finding the exact element inside nested collection.

Using first or default 3 times does not seems to be a correct way.

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

What can be a proper way of achieving the same?

Upvotes: 1

Views: 205

Answers (2)

vasil oreshenski
vasil oreshenski

Reputation: 2836

If you want better looking code why don't use LINQ query syntax. I always find it easier to read LINQ query when looking at someone else's code, especially for complex operations.

Something like this:

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();

Upvotes: 0

nvoigt
nvoigt

Reputation: 77304

You may want to use the Any extension method:

var companies = cprIdentificationReply.Companies
                                    .Where(x => (x.Employee
                                                  .Any(y => (y.IDCardIssued
                                                              .Any(z => z.CardNumber
              .Equals(number, StringComparison.InvariantCultureIgnoreCase)
                                                                  )
                                                      )
                                           ).ToList();

Upvotes: 1

Related Questions