Linq:如何针对关联对象使用规范

Dav*_*vid 5 c# linq expression-trees specification-pattern

我正在使用这种形式的规格:

public static Expression<Func<User, bool>> IsSuperhero
{
  get
  {
    return x => x.CanFly && x.CanShootLasersFromEyes;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在表单中使用此规范:

var superHeroes = workspace.GetDataSource<User>().Where(UserSpecifications.IsSuperhero);
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何对这样的关联对象使用规范:

var loginsBySuperheroes = workspace.GetDataSource<Login>().Where(x => x.User [ ??? ]);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,还是我需要重新考虑我的规范实施?

Amy*_*y B 3

明显地:

var loginsBySuperheroes = workspace.GetDataSource<User>()
  .Where(UserSpecifications.IsSuperhero)
  .SelectMany(x => x.Logins);
Run Code Online (Sandbox Code Playgroud)

这可能很有趣:

var secretBillionaires = workspace.GetDataSource<User>()
   .Where(UserSpecifications.IsSuperhero)
   .SelectMany(user => user.Logins)
   .Where(LoginSpecifications.IsSecretIdentity)
   .Select(login => login.DayJob)
   .Where(DayJobSpecifications.IsBillionaire)
Run Code Online (Sandbox Code Playgroud)