Dot-Net

在 LINQ 中與匿名類型不同(在 VB.NET 中)

  • November 22, 2012

假設List下面引用的內容包含 2 個元素:

Dim Countries = From c In List _
               Select New With { .Country = c.Country, .CountryID = c.CountryID }

上面的程式碼返回

.Country=Spain .CountryID = 1
.Country=Spain .CountryID = 1

我怎樣才能得到不同的值?查詢Countries應該只包含

.Country=Spain .CountryID = 1

我只能假設您對使用匿名類型已經死心了,因為 Alex Peck 給出的答案是正確的。(我已經投票了)。

然而,這歸結為 VB.NET 與 C# 編譯器的討論。

在 VB.NET 中,當遇到匿名類型時,只有那些聲明為關鍵屬性的屬性才能用於比較目的。因此,在沒有密鑰的 VB.NET 中,當您嘗試進行不同的比較時,什麼都不會發生。

在這裡閱讀所有相關資訊。

因此,首先,要回答您的問題,這適用匿名類型:

Dim Countries = From c In List Select New With {Key c.CountryId, c.Country} Distinct.ToList

在此處輸入圖像描述

這就是為什麼自由和平的答案不太奏效的原因。

C# 但是編譯器有點不同。

當遇到匿名類型並且需要比較操作時,c# 編譯器會覆蓋 Equals 和 GetHashCode。它將遍歷匿名類型的所有公共屬性以計算對象的雜湊碼以測試是否相等。

您可以在此處閱讀更多相關資訊。

希望這能回答你的問題。

引用自:https://stackoverflow.com/questions/6556077