どのようにIEnumerableをへのIQueryableオブジェクトによって作成された式の実行を転送しますか?
-
20-08-2019 - |
質問
私のコードでは、私は私のリポジトリのIQueryableをしたいのですが。この方法で、選択の基準は、LINQの式ツリーになります。
私はtheorieに私のリポジトリをモックとしたい場合は、さて、これは非常に簡単です:ちょうど(もたIQueryableオブジェクトである)私のリポジトリのインターフェースを実装する
。私のモックリポジトリの実装は専用メモリのコレクションではなく、私の質問は次のようになります。あなたは私のメモリ内コレクション(IEnumerableを)にクエリを転送するために、私のモックののIQueryableインターフェイスを実装する簡単な方法を知っています。<? / P>
あなたの応答をありがとう、
の のいくつかの精密のの
私のリポジトリのクライアントオブジェクトは、このように私のリポジトリを使用します。
VAR結果= entry.Productが== "SomeProduct" エントリを選択MyRepositoryのエントリから、
ToListメソッドまたはAsEnumerableは、クエリを実行し、リストとして、またはIEnumerableをとして結果を返すことは何ですかありません。しかし、私は、IEnumerableをオブジェクトの呼び出しで式を変換IQueryProviderで、私のリポジトリ上のIQueryableインターフェイスを実装する必要があります。
の のソリューションのの
ソリューションの実装はAsQueryableと私のインメモリコレクションへのIQueryableへの呼び出しを委任されます。
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
}
解決
あなたのモックに AsQueryable して使用してください。今、彼らは照会可能だと、あなたは他の照会可能のようにそれらを扱うことができます。
他のヒント
あなたが拡張メソッドを使用することができます。
.ToList<>