I have the following EF class derived from a database (simplified)
class Product
{
public string ProductId;
public string ProductName;
public string CategoryId;
public string CategoryName;
}
ProductId is the Primary Key of the table.
For a bad design decision made by the DB designer (I cannot modify it), I have CategoryId and CategoryName in this table.
I need a DropDownList with (distinct) CategoryId as Value and CategoryName as Text. Therefore I applied the following code:
product.Select(m => new {m.CategoryId, m.CategoryName}).Distinct();
which logically it should create an anonymous object with CategoryId and CategoryName as properties. The Distinct() guarantees that there are no duplicates pair (CategoryId, CategoryName).
But actually it does not work. As far as I understood the Distinct() works just when there is just one field in the collection otherwise it just ignores them…is it correct? Is there any workaround? Thanks!
UPDATE
Sorry product is:
List<Product> product = new List<Product>();
I found an alternative way to get the same result as Distinct():
product.GroupBy(d => new {d.CategoryId, d.CategoryName})
.Select(m => new {m.Key.CategoryId, m.Key.CategoryName})
I assume that you use distinct like a method call on a list. You need to use the result of the query as datasource for your DropDownList, for example by materializing it via
ToList.Another way if you need the real objects instead of the anonymous type with only few properties is to use
GroupBywith an anonymous type:A third option is to use MoreLinq’s
DistinctBy.