我有客户动态列表IEnumerable<Customer>
现在我想从该列表中获得不同的公司名称?
我以为我可以做类似的事情
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但是今天才知道我不能... 如何构建这样的查询?
最佳答案
您在代码中所做的事情和您在问题标题中提出的问题是两件不同的事情。
如果你想要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> .这会检查正在枚举的类型并尝试弄清楚如何处理它(链接对此进行了详细描述)。
这一切都像宣传的那样工作,除非被动态处理的类型不能被默认的相等比较器处理。在这种情况下,您必须使用采用自定义相等比较器的覆盖。
关于c# - IEnumerable<动态> linq 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376923/