2015-07-12 19 views
-2

檢索我有型好一個簡單的集合,其還具有數據集的對象時,它LINQ的含有不工作,從單一的方法

我得到的數據集對象從孔收集這樣

var dataset = well.Datasets.Single(u=> u.ID == datasetID); 
if (dataset!=null) 
{ 
    well.Datasets.Contains(dataset);// returns false here 
} 

根據我的理解,這裏的Contains假設在前面的語句中返回true,我從同一個集合中獲取這個對象。

爲什麼它返回false?

+8

難道你不是指'well.Datasets.Contains(dataset)'? –

+1

我真的很驚訝你沒有遇到編譯器或運行時錯誤與此代碼。 'well.DataSets.Single'永遠不會返回null。如果沒有匹配,它會拋出一個異常(我認爲你想要'SingleOrDefault')。另外,正如Grant提到的那樣,您在'well'上調用'Contains'而不是包含數據集的'well.DataSets'屬性。這會給你一個編譯器錯誤,除非'well'也是一個'IEnumerable ',所以如果這段代碼編譯,這就引出了一個問題:什麼數據集是'好的'和'IEnumerable'的? –

+0

@Asad我已經更新了問題,並將代碼更改爲well.Datasets.Contains。此外Single或SingleOrDefault在這裏不是問題,我理解兩者之間的區別。問題是關於Contains方法。我會很感激,如果你可以啓發同樣的。 – MegaMind

回答

1

發生這種情況是因爲您正在嘗試搜索自定義對象。所以這裏比較不會是基於價值的比較。對於C#編譯器,你從

var數據= well.Datasets.Single(U => u.ID == datasetID所)得到的對象;

會與您在變量中具有的對象不同。

爲了更好地理解C#中對象比較的工作原理。

+0

我不明白如果我從集合中獲取對象並嘗試執行某些操作,如從集合中刪除該對象,那麼爲什麼它不會假定工作。如果不是Contains,我需要從集合中刪除我的對象,我相信這是唯一的選擇。從集合中獲取對象並將其刪除。我在這裏看不到你的觀點。這適用於我的應用程序中的其他任 – MegaMind