То, что вы делаете в коде и то, что вы спрашиваете в заголовке своего вопроса, - это две разные вещи.
Если вы хотите IEnumerable<dynamic>
, вы должны сделать следующее:
IEnumerable<dynamic> cur = (from c in result.Customers
select g.CompanyName).Cast<dynamic>().Distinct();
from c in result.Customers select g.CompanyName
возвращает IEnumerable<string>
.
Cast<dynamic>()
возвращает IEnumerable<dynamic>
.
Distinct()
возвращает различных членов перечислимого.
Distinct()
по умолчанию использует средство сравнения по умолчанию EqualityComparer . Это проверяет перечисляемый тип и пытается выяснить, как с ним обращаться (ссылка описывает это подробно).
Это все работает так, как объявлено, если тип, который обрабатывается динамически, не может быть обработан компаратором равенства по умолчанию. В этом случае вам придется использовать переопределение, которое использует пользовательский компаратор равенства.