Я хочу выбрать все категории из веб-сервиса. У веб-службы нет метода для этого, поэтому мне нужно получить все продукты, а затем выбрать все категории, в которых находятся эти продукты. Когда я получаю данные из веб-службы, я создаю WebServiceProduct (ID, Name и т. Д.) И WebServiceCategory Его имя, имя и т. Д.).
Это не работает:
IQueryable<SelectListItem> categories = (from p in webserviceProductRepository.GetProducts()
from c in p.Categories
select new SelectListItem
{
Value = c.ID.ToString(),
Text = c.Name
}).Distinct().OrderBy(c => c.Text);
Но это работает, когда я впервые выбираю его как тип анонима:
var foo = (from p in webserviceProductRepository.GetProducts()
from c in p.Categories
select new
{
ID = c.ID.ToString(),
Name = c.Name
}).Distinct().OrderBy(c => c.Name);
IQueryable<SelectListItem> categories = from c in foo
select new SelectListItem
{
Value = c.ID.ToString(),
Text = c.Name
};
Я также пытался с IEqualityComparer и переопределенными Equals и GetHashCode проверить WebServiceCategory.ID, но он также не работает.
Итак, мой вопрос: почему Distinct () лучше работает с анонимным типом, чем с моим объектом WebServiceCategory и SelectListItem?