2012-02-13 86 views
0

有人可以請建議我如何編輯以下內容,以便我可以返回IQueryable<B>repoA給定謂詞Func<B, bool>如何從IQueryable <T>投擲到IQueryable <U>和<Func <T, bool>>到<Func <U, bool>>以獲得樂趣?

在此先感謝。

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; 
    } 
} 
+1

這是您爲了好玩而做的事情嗎?仿製藥瘋了嗎? :) – RPM1984 2012-02-13 20:26:25

+0

請注意,任何帶有'<'s and '>'*的文本必須*被格式化爲代碼(反引號或四空格縮進)才能出現。查看我的編輯例子。 – AakashM 2012-02-14 09:09:44

回答

5

你會被映射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實例的屬性構造...

+0

@sarfeast - 如果您開始接受答案,或者如果答案不可接受,請添加註釋,解釋原因。 – mbeckish 2012-08-29 19:21:01

相關問題