我有动态的客户列表IEnumerable<Customer>
现在我想从该列表中获得明显的公司名称?
我以为我可以做点什么
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但今天得知我不能...... 我该如何构建这样的查询?
答案 0 :(得分:5)
您在代码中所做的事情以及您在问题标题中提出的问题是两回事。
如果您需要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<T>。这将检查枚举的类型并尝试找出如何处理它(链接详细描述了这一点)。
除非默认的相等比较器无法处理动态处理的类型,否则这一切都与广告一样有效。在这种情况下,您将必须使用带有自定义相等比较器的覆盖。
答案 1 :(得分:4)
只要Customer
类有成员CompanyName
,您就可以执行以下操作:
var companies = (from c in result.Customers
select c.CompanyName).Distinct();
此处使用dynamic
关键字优于var
没有任何优势,除了它可以防止出现编译器错误。