21

In my repository implementation I can run the following query using a lambda expression:

public IList<User> GetUsersFromCountry(string)
{
    return _UserRepository.Where(x => x.Country == "Sweden").ToList();                  
}

So far so good, simple stuff. However, I'm having difficulties to write a lambda expression against a nested -> nested list. Given the following example (sorry couldn't think of a better one):

The following query works absolutely fine and returns all clubs, which have members over the age of 45

public IList<Clubs> GetGoldMembers()
        {
            var clubs =   from c in ClubRepository
                          from m in c.Memberships 
                          where m.User.Age  >  45
                          select c;

            return clubs;
        }

At the moment, this is where my knowledge of lambda expression ends.

How could I write the above query against the ClubRepository, using a lambda expression, similar to the example above?

3 Answers 3

31

This might work (untested)...

var clubs = ClubRepository.Where(c=>c.MemberShips.Any(m=>m.User.Age > 45));
Sign up to request clarification or add additional context in comments.

1 Comment

FWIW, this approach works, but doesn't really domonstrate how to translate the multiple 'from' statements into LINQ methods. You need the SelectMany method for that (that's what the C# compiler does).
22

Here's one way to do it:

var clubs = clubRepository
    .SelectMany(c => c.Memberships, (c, m) => new { c, m })
    .Where(x => x.m.User.Age > 45)
    .Select(x => x.c);

1 Comment

SelectMany() flattens a list of lists... stackoverflow.com/questions/958949/…
0

A more generic way

List<T> list= new List<T>();
list= object1.NestedList1.SelectMany(x => x.NestedList2).ToList();

Where NestedList2 matches the data type of "list"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.