如何从IQueryable<;T>;至IQueryable<;U>;并且<;Func<;T、 b
本文关键字:lt gt IQueryable Func 并且 | 更新日期: 2023-09-27 18:24:30
有人能建议我如何编辑以下内容,以便在给定谓词Func<B, bool>
的情况下从repoA
返回IQueryable<B>
吗?
提前谢谢。
interface IRepo<T> {
IQueryable<T> FindBy(Func<T, bool> predicate);
}
class A {
public int Id { get; set; }
public string Name { get; set; }
}
class RepoA : IRepo<A> {
public IQueryable<A> FindBy(Func<A, bool> predicate) {
return new EnumerableQuery<A>(new A[1]);
}
}
class B {
public int Id { get; set; }
public string Name { get; set; }
}
class RepoB : IRepo<B> {
IRepo<A> repoA = new RepoA();
public IQueryable<B> FindBy(Func<B, bool> predicate) {
var newPredicate = Magic goes here;
var queryableA = repoA.FindBy(newPredicate);
var queryableB = More magic goes here;
}
}
您可以通过将IQueryable<A>
映射到IQueryable<B>
来实现这一点。正确的方法是Select
:
var queryableB = queryableA.Select(a => new B { Id = a.Id, Name = a.Name });
至于映射谓词,您可以创建一个以相同方式进行映射的新谓词:
var newPredicate = a => predicate(new B { Id = a.Id, Name = a.Name });
这些工作是通过创建一个新的内联B实例来完成的,该实例是使用传入的a实例的属性构建的。。。