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

Hir*_*atz 3 c# sql linq expression-trees

假设有两个等价的查询

var q1 = from x in list select x;
var q2 = from x in list where 1 > 0 select x;
Run Code Online (Sandbox Code Playgroud)

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

例如,可以实现类似的方法

static bool AreEqual<T>(IQueryable<T> q1, IQueryable<T> q2) { .. }
Run Code Online (Sandbox Code Playgroud)

使用底层表达式树等等?

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

AAA*_*ddd 5

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

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

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