2015-08-16 136 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是雙,例如)。 所以,常用的方法是無法解決的。問題的邊界是非常不明確的。

在我看來,你的問題不是原始問題,它是解決方案的一部分。所以,也許我們需要更深入地看到最初的問題。

相關問題