IEqualityComparer が結果セットの単一フィールドの値に基づいて特定の結果を除外する場合、カスタム実装を使用して LINQ 結果セットで "Except" メソッドを使用しようとしています。
だから、単純化された形で私は...
'' Get collection of published sites...
Dim List1 = (From i In db.Sites _
Where (i.StatusID = published) _
Select i.SiteID, _
i.SiteName)
'' Find those with a pending site, but exclue all those whose SiteID is in List1...
Dim insComparer = New insCompare
Dim List2 = (From i In db.Sites _
Where (i.StatusID = pending) _
Select i.SiteID, _
i.SiteName).Except(List1, insComparer)
私の比較者は次のとおりです...
Public Class insCompare
Implements System.Collections.Generic.IEqualityComparer(Of Object)
Public Function Equals1(ByVal x As Object, ByVal y As Object) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of Object).Equals
Return IIf(x.SiteID = y.SiteID, True, False)
End Function
Public Function GetHashCode1(ByVal x As Object) As Integer Implements System.Collections.Generic.IEqualityComparer(Of Object).GetHashCode
Return x.SiteID.ToString.ToLower.GetHashCode()
End Function
End Class
".Except" 行で無効なキャスト例外が発生し、"型 '...insCompare' のオブジェクトを型 'System.Collections.Generic.IEqualityComparer' にキャストできません" というメッセージが表示されます。
なぜこれが喜ばれるのか、誰でも光を当てることができますか.