여기에 질문을 게시하는 사람이 처음입니다. LINQ의 몇 가지 기능을 데모하려고하고 있으며 걸림돌을 맞았습니다. 다음 쿼리는 예상대로 작동하지 않을 :LINQ-to-Objects -이 간단한 복합 키 그룹의 문제점은 무엇입니까?
여기Dim peopleByAgeAndName = _
From p In (New PeopleRepository).GetAll
Group By key = New With {p.Age, p.Name} Into Group
Select Group
은 매우 간단 PeopleRepository입니다 :
Public Class PeopleRepository
Public Function GetAll() As List(Of Person)
Dim people As New List(Of Person)
people.Add(New Person With {.Name = "Test Name #1", .Age = 33})
people.Add(New Person With {.Name = "Test Name #1", .Age = 33})
people.Add(New Person With {.Name = "Test Name #2", .Age = 0})
people.Add(New Person With {.Name = "Test Name #3", .Age = 0})
people.Add(New Person With {.Name = "Test Name #4", .Age = 0})
people.Add(New Person With {.Name = "Test Name #5", .Age = 35})
people.Add(New Person With {.Name = "Test Name #1", .Age = 39})
Return people
End Function
End Class
그리고 여기에 더 간단한 Person 클래스입니다 : 이것은 분명히
Public Class Person
Property Name As String
Property Age As Integer
End Class
테스트 목적으로 모든 코드 설정. peopleByAgeAndName
쿼리를 실행 한 후에는 6 개의 그룹이 필요합니다. 각각은 "Test Name # 1"에 해당하는 그룹과 33 세의 Person 개체를 포함하고 있습니다. 비록 내가 뭘하든 관계없이 각각 하나의 요소로 구성된 7 개의 그룹이 있습니다.
의견이 있으십니까? 이것이 LINQ-to-Objects에 대해 정상적인 것인지 궁금합니다. 다시 말하지만, 모든 테스트 코드입니다. 나는 이것이 어떻게 작동하는지 더 잘 이해하려고 노력하고있다. 익명의 객체를 키로 사용할 때 그룹에 대해 속성 별 비교를 수행해야한다는 것을 이해했습니다. 나는 6 그룹이 아니라 7이되어야합니다.
고마워요!
var peopleByAgeAndName =
from p in peopleRepository.GetAll()
group p by new {p.Age, p.Name} into g
select g;
내가 대신 7 6 개 그룹 나는 또한 그룹 키를 사용할 수 있음을 확인 얻을 : -
업데이트 기록을 위해
는 C#으로 다시 쿼리는 내가 예상 한대로 정확하게 수행 VB에서는 있지만 C#. 좀 이상 해요.
복합 키의 기준으로 사용자 정의 유형을 사용하고 있지만 익명 유형의 문자열을 사용하고 있기 때문에 Integer ...해야한다고 생각합니다. IEqualityCOmparer를 구현하십시오. 그것은 Person 객체를 전혀 비교하려고 시도해서는 안됩니다. 그냥 열쇠. –