Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何从IQueryable中施放<;T>;到IQueryable<;U>;及<;Func<;T、 布尔>&燃气轮机;至<;Func<;U、 布尔>&燃气轮机;为了好玩?_C#_.net_Linq_Generics - Fatal编程技术网

C# 我如何从IQueryable中施放<;T>;到IQueryable<;U>;及<;Func<;T、 布尔>&燃气轮机;至<;Func<;U、 布尔>&燃气轮机;为了好玩?

C# 我如何从IQueryable中施放<;T>;到IQueryable<;U>;及<;Func<;T、 布尔>&燃气轮机;至<;Func<;U、 布尔>&燃气轮机;为了好玩?,c#,.net,linq,generics,C#,.net,Linq,Generics,是否有人可以建议我如何编辑以下内容,以便在给定Func谓词的情况下,从repoA返回IQueryable 提前谢谢 interface IRepo<T> { IQueryable<T> FindBy(Func<T, bool> predicate); } class A { public int Id { get; set; } public string Name { get; set; } } class RepoA : IR

是否有人可以建议我如何编辑以下内容,以便在给定
Func
谓词的情况下,从
repoA
返回
IQueryable

提前谢谢

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;
    }
}
接口IRepo{
IQueryable FindBy(Func谓词);
} 
甲级{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
类别:IRepo{
公共IQueryable FindBy(Func谓词){
返回新的EnumerableQuery(新的A[1]);
}
}
B类{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
B类:IRepo{
IRepo repoA=新repoA();
公共IQueryable FindBy(Func谓词){
var newPredicate=Magic在这里;
var queryableA=repoA.FindBy(newPredicate);
var queryableB=这里有更多的魔力;
}
}
您可以通过将
IQueryable
映射到
IQueryable
来实现这一点。正确的方法是
选择

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实例内联,该实例是使用实例中传递的属性构造的…

您可以通过将
IQueryable
映射到
IQueryable
来实现这一点。正确的方法是
选择

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实例内联来完成的,该实例是使用在实例中传递的属性构造的…

这就是为了好玩而做的吗?疯狂使用泛型?:)请注意,任何中带有
s的文本必须格式化为代码(反勾号或四个空格缩进)才能显示。请参阅我的编辑以获取示例。这就是你为了好玩而做的事情?疯狂使用泛型?:)请注意,任何中带有
s的文本必须格式化为代码(反勾号或四个空格缩进)才能显示。有关示例,请参见我的编辑。@sarfeat-如果您开始接受答案,或者如果答案不可接受,请添加一条解释原因的注释。@sarfeat-如果您开始接受答案,或者如果答案不可接受,请添加一条解释原因的注释。