Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拦截LINQ到SQL结果_C#_Datacontext_Devart - Fatal编程技术网

C# 拦截LINQ到SQL结果

C# 拦截LINQ到SQL结果,c#,datacontext,devart,C#,Datacontext,Devart,我试图从发送到DataContext(Devart.Data.linq)的linq表达式中捕获查询结果。我可以利用Log属性记录查询,但还没有找到截取IQueryable结果的方法 目的是将查询和结果配对在一起,序列化它们,然后在测试套件中使用它们模拟数据上下文 所有看起来很有希望的Devart.Data.Linq.DataContext方法(ExecuteQuery、Query)都是非虚拟的,因此我无法覆盖它们来存储结果。我不想在编写linq查询时记录结果,因为在整个应用程序中粘贴与测试相关的

我试图从发送到DataContext(Devart.Data.linq)的linq表达式中捕获查询结果。我可以利用Log属性记录查询,但还没有找到截取IQueryable结果的方法

目的是将查询和结果配对在一起,序列化它们,然后在测试套件中使用它们模拟数据上下文


所有看起来很有希望的Devart.Data.Linq.DataContext方法(ExecuteQuery、Query)都是非虚拟的,因此我无法覆盖它们来存储结果。我不想在编写linq查询时记录结果,因为在整个应用程序中粘贴与测试相关的代码会非常混乱,这意味着粘贴的过程非常困难。

我最终找到了一种迂回的方法,通过包装DataContext和包含的iQueryTables截取查询和结果。这需要实现自定义IQueryable和IQueryProvider。下面给出了一个很好的例子
一旦完成,就可以在重写的
IQueryProvider.Execute
方法中捕获查询结果。捕获ORM生成的关联SQL需要跟踪
DataContext.Log
属性,以了解查询执行前后的更改。

我不确定是否理解,为什么不直接迭代
IQueryable
或使用
ToList
来获得结果呢?@Hogan我的理解是OP想要他们得到的生成的查询和结果,所以这就是我感到困惑的原因。@juharr(你的第一个问题)这就是编写linq查询的地方。我想把结果记录在别处。例如,我的希望是扩展DataContext,并以某种方式在中间步骤捕获结果。“也许这是不可能的,我的问题毫无意义。”霍根为困惑道歉。我想要结果。查询很容易通过Log属性获得。我已经修改了这个问题。我不知道这个特殊的提供者。。。但是许多查询提供程序允许您通过在
IQueryable