2009-02-02 42 views
3

在我的代碼中,我想讓我的存儲庫IQueryable。這樣,選擇標準將是一個linq表達式樹。如何將由IQueryable對象創建的表達式的執行轉移到IEnumerable?

現在,如果我想模擬我的倉庫在theorie這很容易:只需實現我的存儲庫(這也是一個IQueryable對象)的接口。我的問題是:你知道一個簡單的方法來實現我的模擬IQueryable接口,將查詢傳輸到我的內存集合(IEnumerable)嗎?我的模擬庫實現將只是一個內存集合,但我的問題是:

感謝您的答覆,

有些精密

我的倉庫的客戶對象將使用我的倉庫是這樣的:

VAR的結果=從MyRepository條目,其中條目。 Product ==「SomeProduct」選擇條目;

ToList或AsEnumerable將執行查詢並將結果作爲List或IEnumerable返回。但是我必須在存儲庫上實現IQueryable接口,並使用IQueryProvider將表達式轉換爲IEnumerable對象。

解決方案

的解決方案的實施是委託調用的IQueryable我inmemory收集與AsQueryable已。

public class MockRepository : IQueryable<DomainObject> 
    { 
     private List<DomainObject> inMemoryList = new List<DomainObject>(); 

     #region IEnumerable<DomainObject> Members 

     public IEnumerator<DomainObject> GetEnumerator() 
     { 
      return inMemoryList.GetEnumerator(); 
     } 

     #endregion 

     #region IEnumerable Members 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return inMemoryList.GetEnumerator(); 
     } 

     #endregion 

     #region IQueryable Members 

     public Type ElementType 
     { 
      get 
      { 
       return inMemoryList.AsQueryable().ElementType; 
      } 
     } 

     public Expression Expression 
     { 
      get 
      { 
       return inMemoryList.AsQueryable().Expression; 
      } 
     } 

     public IQueryProvider Provider 
     { 
      get 
      { 
       return inMemoryList.AsQueryable().Provider; 
      } 
     } 

     #endregion 
    } 

回答

1

使用AsQueryable你的嘲弄。現在他們是可查詢的,你可以像對待其他查詢一樣對待它們。

0

您可以使用擴展方法

.ToList<> 
+0

我不知道如何使用它,因爲我的查詢將(在IQueryable的對象上第一的GetEnumerator期間)創建一個表達我的IQueryProvider應該是表達式轉換與結果的IEnumerable OBJET,作爲至極不是ToList方法。 – 2009-02-02 13:37:20

+0

我真的希望我可以幫助更多,但我不會能夠幫助。 – 2009-02-02 13:49:16

相關問題