У меня есть следующие EF класса, полученных из базы данных (упрощенный)Как использовать LINQ Distinct() с несколькими полями
class Product
{
public string ProductId;
public string ProductName;
public string CategoryId;
public string CategoryName;
}
ProductId
является Первичный ключ таблицы.
Для плохого дизайнерского решения, сделанного дизайнером БД (я не могу его изменить), в этой таблице есть CategoryId
и CategoryName
.
Мне нужен DropDownList с (отчетливый) CategoryId
как Value и CategoryName
в Текст. Поэтому я применил следующий код:
product.Select(m => new {m.CategoryId, m.CategoryName}).Distinct();
логически она должна создать анонимный объект с CategoryId
и CategoryName
как свойства. Distinct()
гарантирует отсутствие пары дубликатов (CategoryId
, CategoryName
).
Но на самом деле это не работает. Насколько я понял, Distinct()
работает только тогда, когда в коллекции есть только одно поле, иначе оно просто игнорирует их ... это правильно? Есть ли обходной путь? Благодаря!
UPDATE
К сожалению 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})
'есть только одно поле в коллекции' бессмысленна. Что вы имеете в виду? – leppie
@leppie моя догадка есть, он имеет в виду при проецировании на одно значение, а не анонимный тип (содержащий более одного поля). – sehe
«За плохое дизайнерское решение, сделанное разработчиком БД (я не могу его изменить)». Возможно, вы не можете изменить базу данных, но это не значит, что вы не можете исправить это в своей EF-модели. Это избили EF. – Steven