Как запросить вложенный список с помощью лямбда-выражения - PullRequest
19 голосов
/ 26 октября 2009

В моей реализации репозитория я могу выполнить следующий запрос, используя лямбда-выражение:

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

Пока все хорошо, простые вещи. Однако у меня возникают трудности при написании лямбда-выражения для вложенного -> вложенного списка. Учитывая следующий пример (извините, я не мог придумать лучшего):

Следующий запрос работает абсолютно нормально и возвращает все клубы, в которых есть участники старше 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;
        }

В данный момент на этом мои знания о лямбда-выражении заканчиваются.

Как я могу написать приведенный выше запрос к ClubRepository, используя лямбда-выражение, подобное приведенному выше примеру?

Ответы [ 2 ]

26 голосов
/ 26 октября 2009

Это может работать (не проверено) ...

var clubs = ClubRepository.Where(c=>c.MemberShips.Any(m=>m.User.Age > 45));
16 голосов
/ 26 октября 2009

Вот один из способов сделать это:

var clubs = clubRepository
    .SelectMany(c => c.Memberships, (c, m) => new { c, m })
    .Where(x => x.m.User.Age > 45)
    .Select(x => x.c);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...