Distinct in LINQ with anonymous types (in VB.NET)

后端 未结 5 1437
醉梦人生
醉梦人生 2020-12-16 20:29

Supposing the referenced List below contains 2 elements:

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


        
5条回答
  •  有刺的猬
    2020-12-16 21:10

    I can only assume you're dead set on the use of anonymous type as the answer given by Alex Peck is correct. (and I've upvoted it).

    However, this boils down to a VB.NET vs C# compiler discussion.

    In VB.NET, when an anonymous type is encountered only those properties declared as key properties can be used for comparison purposes. So in VB.NET without key, when you're attempting to do a distinct comparison, nothing will occur.

    Read all about it here.

    So first, to answer your question, this works with anonymous types:

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

    enter image description here

    This is why freedompeace's answer doesn't quite work.

    C# however the compiler is a little different.

    When an anonymous type is encountered and a comparison operation is needed the c# compiler overrides Equals and GetHashCode. It will iterate over all of the public properties of the anonymous type to compute the object's hash code to test for equality.

    And you can read more about that here.

    Hope this answers your question.

提交回复
热议问题