Как использовать LINQ Distinct() с несколькими полями

У меня есть следующий класс EF , полученный из базы данных (упрощенный)

class Product
{ 
     public string ProductId;
     public string ProductName;
     public string CategoryId;
     public string CategoryName;
}

ProductId — это первичный ключ таблицы.

Из-за плохого проектного решения, принятого разработчиком БД (я не могу его изменить), у меня есть CategoryIdи CategoryNameв этой таблице.

Мне нужен DropDownListс (различным) CategoryIdкак Valueи CategoryNameкак Text. Поэтому я применил следующий код:

product.Select(m => new {m.CategoryId, m.CategoryName}).Distinct();

, что логически должно создать анонимный объект со свойствами CategoryIdи CategoryName. Distinct()гарантирует отсутствие пары дубликатов ( CategoryId, CategoryName).

Но на самом деле это не работает. Насколько я понял, Distinct()работает только тогда, когда в коллекции есть только одно поле, иначе он просто их игнорирует... правильно ли это? Есть ли обходной путь? Спасибо!

ОБНОВЛЕНИЕ

Извините product:

List<Product> product = new List<Product>();

Я нашел альтернативный способ получить тот же результат, что и Distinct():

product.GroupBy(d => new {d.CategoryId, d.CategoryName}) 
       .Select(m => new {m.Key.CategoryId, m.Key.CategoryName})
62
задан CiccioMiami 23 May 2012 в 12:49
поделиться