在我的代碼中,我想讓我的存儲庫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
}
我不知道如何使用它,因爲我的查詢將(在IQueryable的對象上第一的GetEnumerator期間)創建一個表達我的IQueryProvider應該是表達式轉換與結果的IEnumerable OBJET,作爲至極不是ToList方法。 – 2009-02-02 13:37:20
我真的希望我可以幫助更多,但我不會能夠幫助。 – 2009-02-02 13:49:16