web-dev-qa-db-ja.com

ラムダ式を使用してネストされたリストをクエリする方法

私のリポジトリ実装では、ラムダ式を使用して次のクエリを実行できます。

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に対して上記のクエリを作成するにはどうすればよいですか?

20
Flo

これはうまくいくかもしれません(テストされていません)...

var clubs = ClubRepository.Where(c=>c.MemberShips.Any(m=>m.User.Age > 45));
27
Jason Punyon

これを行う1つの方法は次のとおりです。

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