どのようにIEnumerableをへのIQueryableオブジェクトによって作成された式の実行を転送しますか?

StackOverflow https://stackoverflow.com/questions/503208

質問

私のコードでは、私は私のリポジトリの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<>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top