2016-11-28 2 views
0

DataContext(Devart.Data.Linq)に送信されたlinq式からクエリ結果を取得しようとしています。 Logプロパティを使用してクエリを記録することはできますが、IQueryableの結果を傍受する方法はまだ見つかりませんでした。LINQ to SQL結果のインターセプト

意図は、一緒にクエリと結果をペアそれらをシリアル化し、テストスイートにおけるデータ・コンテキストをモックため、後でそれらを使用することです。

(のexecuteQuery、クエリ)を有望に見えるDevart.Data.Linq.DataContext方法のすべては、非仮想ですので、私は結果を格納するためにそれらを上書きすることはできません。 linqクエリが書かれた時点で結果を記録したくないので、アプリケーション全体でテスト関連のコードを貼り付けることが非常に面倒になるでしょう。

+0

「IQueryable」を繰り返したり、結果を得るために「ToList」を使うのはなぜですか? – juharr

+0

@Hogan私が理解していることは、OPが生成したクエリと結果を望んでいることです。だから私は混乱しています。 – juharr

+0

@juharr(あなたの最初の質問)これは、linqクエリが書かれた時点になります。私は他の場所で結果をキャプチャしたい。例えば、私の希望はDataContextを拡張し、何とか途中の段階で結果を取得することでした。おそらくそれは不可能で、私の質問は意味をなさない。 – charliemango

答えて

0

私は最終的にDataContextと含まIQueryablesの両方を包むを通じてクエリと結果の両方を遮断する回り道を発見しました。これには、カスタムIQueryableとIQueryProviderの実装が必要でした。良い例はhttps://blogs.msdn.microsoft.com/alexj/2010/03/01/tip-55-how-to-extend-an-iqueryable-by-wrapping-it/ で与えられました。オーバーライドされたIQueryProvider.Executeメソッドでクエリの結果をキャッチできました。 ORMによって生成された関連するSQLをキャッチするには、クエリが実行される前後の変更についてDataContext.Logプロパティを追跡する必要がありました。