私のリポジトリ実装では、ラムダ式を使用して次のクエリを実行できます。
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に対して上記のクエリを作成するにはどうすればよいですか?
これはうまくいくかもしれません(テストされていません)...
var clubs = ClubRepository.Where(c=>c.MemberShips.Any(m=>m.User.Age > 45));
これを行う1つの方法は次のとおりです。
var clubs = clubRepository
.SelectMany(c => c.Memberships, (c, m) => new { c, m })
.Where(x => x.m.User.Age > 45)
.Select(x => x.c);