IEnumerable <dynamic> linq表达式

ser*_*nfo 3 c# linq-to-objects dynamic c#-4.0

我有动态的客户名单 IEnumerable<Customer>

现在我想从该列表中获得明显的公司名称?

我以为我可以做点什么

 dynamic cur = (from c in result.Customers
                      select g.CompanyName).Distinct();
Run Code Online (Sandbox Code Playgroud)

但今天学到了我不能......我怎么能建立这样的查询呢?

小智 5

您在代码中所做的以及您在问题标题中提出的问题是两回事.

如果您需要,IEnumerable<dynamic>您必须执行以下操作:

IEnumerable<dynamic> cur = (from c in result.Customers
               select g.CompanyName).Cast<dynamic>().Distinct();
Run Code Online (Sandbox Code Playgroud)

from c in result.Customers select g.CompanyName回报IEnumerable<string>.
Cast<dynamic>()回报IEnumerable<dynamic>.
Distinct()返回可枚举的不同成员.

Distinct()默认情况下,使用默认的相等比较器EqualityComparer <T>.这将检查枚举的类型并尝试找出如何处理它(链接详细描述了这一点).

除非动态处理的类型无法由默认的相等比较器处理,否则这一切都按照公布的方式工作.在这种情况下,您将必须使用带有自定义相等比较器的覆盖.