Jak używać LINQ Distinct () z wieloma polami
Mam następująceKlasa EF pochodzące z bazy danych (uproszczone)
class Product
{
public string ProductId;
public string ProductName;
public string CategoryId;
public string CategoryName;
}
ProductId
jestGłówny klucz stołu.
Dla złej decyzji projektowej podjętej przez projektanta DB (nie mogę go zmodyfikować), mamCategoryId
iCategoryName
w tej tabeli.
PotrzebujęLista rozwijana z (wyraźny)CategoryId
tak jakWartość iCategoryName
tak jakTekst. Dlatego zastosowałem następujący kod:
product.Select(m => new {m.CategoryId, m.CategoryName}).Distinct();
co logicznie powinno stworzyć anonimowy obiekt za pomocąCategoryId
iCategoryName
jako właściwości. TheDistinct()
gwarantuje, że nie ma pary duplikatów (CategoryId
, CategoryName
).
Ale tak naprawdę to nie działa. O ile zrozumiałemDistinct()
działa tylko wtedy, gdy w kolekcji jest tylko jedno pole, inaczej po prostu je ignoruje ... czy jest poprawne? Czy jest jakieś obejście? Dzięki!
AKTUALIZACJA
Przepraszamproduct
jest:
List<Product> product = new List<Product>();
Znalazłem alternatywny sposób uzyskania tego samego wynikuDistinct()
:
product.GroupBy(d => new {d.CategoryId, d.CategoryName})
.Select(m => new {m.Key.CategoryId, m.Key.CategoryName})