2015-08-16 111 views
0

的打击两个不同的查询评估,以相同的结果。
我需要检查这些平等而不执行查询。
如何检查是否两个不同的LINQ查询是否相同?如何检查两个不同的LINQ查询是否有相同的结果?

var exprA = (from o in orders where o.HasPrice == true); 
var exprB = (from o in orders where o.HasPrice != false); 
//HasPrice is a boolean 

任何建立在.NET解决方案或现有的库将不胜感激。

+1

只是好奇:什么情况下,为什么你需要知道,如果代码,基本上是做一样的吗? – Udontknow

+0

@Udontknow性能问题。它不会总是一个布尔值。这可能是其中'o.Price> 0 && o.Price <2'和'其中o.Price == 1'这里是价格INT。请检查Backs回答这个问题。 –

+0

你到底在找什么: 1,以上两个查询的最终结果IEnumerbale 是否相同 或者2.你甚至不想进入生成IEnumerable类型的级别,并且希望事先给你赋值。在案例1中,我们可以简单地通过重写Equals和类型T的GetHashCode的方法,我可以提供创建一个IEnumerable比较器的解决方案是它的情况下1 –

回答

5

如果这两个(或任何其他两个)陈述“相同”的定义很差。如果HasPrice是而不是一个人会期望的布尔?

无论如何,这里最接近答案的就是您需要使用SMT algorithm来评估。我不知道你的用例存在“开箱即用”。

+0

感谢。对我来说似乎是一个好的开始 –

2

我想,这几乎不可能解决这个问题。因为在复杂查询中存在如下复杂条件: where o.Price > 0 && o.Price < 2where o.Price == 1。 有时这些查询是相等的(当o.Price是int或长),但有时没有(当o.Price是双,例如)。 所以,常用的方法是无法解决的。问题的边界是非常不明确的。

在我看来,你的问题不是原始问题,它是解决方案的一部分。所以,也许我们需要更深入地看到最初的问题。

相关问题