首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否有可能(以编程方式)证明两个LINQ查询相等?

是否有可能(以编程方式)证明两个LINQ查询相等?
EN

Stack Overflow用户
提问于 2018-06-01 07:06:47
回答 3查看 61关注 0票数 3

假设有两个等价的查询,如下所示

代码语言:javascript
复制
var q1 = from x in list select x;
var q2 = from x in list where 1 > 0 select x;

有可能证明它们产生相同的结果集吗?

例如,是否可以实现像这样的方法

代码语言:javascript
复制
static bool AreEqual<T>(IQueryable<T> q1, IQueryable<T> q2) { .. }

使用底层表达式树等等?

(我的现实情况是一个巨大而复杂的查询,我试图在不破坏的情况下进行重构)

EN

回答 3

Stack Overflow用户

发布于 2018-06-01 07:25:05

答案是否定的,特别是对于Linq-To-SQL。

您可以深入到比较sql语句的级别,但是生成的SQL可能会以不同的方式表达相同的基本查询。

你唯一能做的就是写测试用例。

票数 5
EN

Stack Overflow用户

发布于 2018-06-01 17:02:54

您可以尝试这样做:

代码语言:javascript
复制
 var result= q1.Equals(q2);
票数 0
EN

Stack Overflow用户

发布于 2018-06-01 17:13:58

不是通过比较查询本身,不是。因为以不同的方式编写相同的查询将导致不同的表达式树和结果SQL。

您需要做的是运行旧的查询并将结果集存储在列表中。然后运行第二个查询并将结果存储在列表中。然后,您必须比较这两个列表,看看它们是否相同。

这样的东西对你来说应该是有效的:

代码语言:javascript
复制
var dif = result1.Except(result2).Count() == 0 && result2.Except(result1).Count() == 0;

如果dif为False,则两个集合是不同的。我们必须排除这两种方法,否则如果结果2比result1长,你会得到一个错误的匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50634004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档