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

Место общения программистов C#
Anonymous
Как использовать LINQ Distinct() с несколькими полями

Сообщение Anonymous »

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

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


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

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

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

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


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

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

ОБНОВЛЕНИЕ

К сожалению, продукт:

List
product = new List();


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

product.GroupBy(d => new {d.CategoryId, d.CategoryName})
.Select(m => new {m.Key.CategoryId, m.Key.CategoryName})

Вернуться в «C#»