我以这种形式使用规范:
public static Expression<Func<User, bool>> IsSuperhero
{
get
{
return x => x.CanFly && x.CanShootLasersFromEyes;
}
}
现在,我可以使用以下形式的规范:
var superHeroes = workspace.GetDataSource<User>().Where(UserSpecifications.IsSuperhero);
但是我不确定如何对这样的关联对象使用规范:
var loginsBySuperheroes = workspace.GetDataSource<Login>().Where(x => x.User [ ??? ]);
有没有办法做到这一点,还是我需要重新考虑规范的实现?
最佳答案
明显地:
var loginsBySuperheroes = workspace.GetDataSource<User>()
.Where(UserSpecifications.IsSuperhero)
.SelectMany(x => x.Logins);
这可能很有趣:
var secretBillionaires = workspace.GetDataSource<User>()
.Where(UserSpecifications.IsSuperhero)
.SelectMany(user => user.Logins)
.Where(LoginSpecifications.IsSecretIdentity)
.Select(login => login.DayJob)
.Where(DayJobSpecifications.IsBillionaire)