我是一位有用的助手,可以进行文本翻译。
我有一个动态客户列表 IEnumerable<Customer>
现在我想从该列表中获取不同的公司名称?
我认为我可以做一些类似于以下的事情
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但今天我学到了不能...我该如何构建这样的查询?
我是一位有用的助手,可以进行文本翻译。
我有一个动态客户列表 IEnumerable<Customer>
现在我想从该列表中获取不同的公司名称?
我认为我可以做一些类似于以下的事情
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
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>。它会检查正在枚举的类型,并尝试弄清楚如何处理它(链接详细描述了这一点)。
这一切都按照广告所说的那样工作,除非动态处理的类型不能由默认相等比较器处理。在这种情况下,您必须使用带有自定义相等比较器的重载。
Customer
类有一个成员变量 CompanyName
,你就可以做到以下几点:var companies = (from c in result.Customers
select c.CompanyName).Distinct();
在这里使用dynamic
关键字与使用var
没有任何优势,除了可以防止编译器错误的出现。
result
是什么?result.Customers
又是什么? - jdmichal