私は困惑しています。私は助けが必要です。患者の住所データが重複しているDTOオブジェクトがあります。一意のアドレスのみを取得する必要があります。
Dim PatientAddressDto = New List(Of PatientAddress)
{Populate PatientAddressDto with lots of duplicate data}
PatientAddressDto = (From d In PatientAddressDto
Group d By PatientAddressDtoGrouped = New PatientAddress With {
.Address1 = d.Address1,
.Address2 = d.Address2,
.City = d.City,
.State = d.State,
.Zip = d.Zip
}
Into Group
Select New PatientAddress With {
.Address1 = PatientAddressDtoGrouped.Address1,
.Address2 = PatientAddressDtoGrouped.Address2,
.City = PatientAddressDtoGrouped.City,
.State = PatientAddressDtoGrouped.State,
.Zip = PatientAddressDtoGrouped.Zip
}).ToList()
私は運が悪かったので以下を試しました:
PatientAddressDto = (From d In PatientAddressDto
Select New PatientAddress With {
.Address1 = d.Address1,
.Address2 = d.Address2,
.City = d.City,
.State = d.State,
.Zip = d.Zip
}).Distinct
そしてまた
PatientAddressDto = PatientAddressDto.GroupBy(Function(p) New PatientAddress With {
.Address1 = p.Address1,
.Address2 = p.Address2,
.City = p.City,
.State = p.State,
.Zip = p.Zip
})
次のコードが機能することがわかりました。これにより、必要なグループ化が基本的に実行され、新しいオブジェクトがタイプPatientAddressとして入力されるため、匿名オブジェクトとキーワードKeyの使用が不要になります。
多分誰かがそれを説明することができます、現時点では私はできません。ごきげんよう。
Dim PatientAddressDto = New List(Of PatientAddress)
{Populate PatientAddressDto with lots of duplicate data}
PatientAddressDto = (From d In PatientAddressDto
Group d By d.Address1,
d.Address2,
d.City,
d.State,
d.Zip Into g =
Group Let grp = New PatientAddress With {.Address1 = Address1,
.Address2 = Address2,
.City = City,
.State = State,
.Zip = Zip}
Select grp).ToList()
おそらく、PatientAddress
がGetHashCode
とEquals
をオーバーライドしないためです。別の方法は、グループ化のための 匿名型 です。書いてみてください:
Group d By PatientAddressDtoGrouped = New With { Key .Address1 = d.Address1, ....