C# IEnumerable<;动态>;linq表达式
我有动态客户列表C# IEnumerable<;动态>;linq表达式,c#,dynamic,c#-4.0,linq-to-objects,C#,Dynamic,C# 4.0,Linq To Objects,我有动态客户列表IEnumerable 现在我想从那张名单上找出公司的名字 我想我可以做一些类似的事情 dynamic cur = (from c in result.Customers select g.CompanyName).Distinct(); 但是今天我知道我不能。。。 如何构建这样的查询?只要Customer类有一个成员CompanyName,您肯定可以执行以下操作: var companies = (from c in result
IEnumerable
现在我想从那张名单上找出公司的名字
我想我可以做一些类似的事情
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但是今天我知道我不能。。。
如何构建这样的查询?只要
Customer
类有一个成员CompanyName
,您肯定可以执行以下操作:
var companies = (from c in result.Customers
select c.CompanyName).Distinct();
IEnumerable<dynamic> cur = (from c in result.Customers
select g.CompanyName).Cast<dynamic>().Distinct();
在这里使用
dynamic
关键字而不是var
没有任何好处,除了它可以防止出现编译器错误之外。在代码中做什么和在问题标题中问什么是两件不同的事情
如果要IEnumerable
,必须执行以下操作:
var companies = (from c in result.Customers
select c.CompanyName).Distinct();
IEnumerable<dynamic> cur = (from c in result.Customers
select g.CompanyName).Cast<dynamic>().Distinct();
IEnumerable cur=(来自结果中的c.Customers
选择g.CompanyName).Cast().Distinct();
结果中的c中的。客户选择g.CompanyName
返回IEnumerable
Cast()
返回IEnumerable
Distinct()
返回可枚举项的不同成员
Distinct()
默认情况下使用默认的相等比较器。这将检查正在枚举的类型,并尝试找出如何处理它(链接对此进行了详细描述)
除非默认的相等比较器无法处理动态处理的类型,否则这一切都可以按照公布的方式工作。在这种情况下,您必须使用接受自定义相等比较器的覆盖。不能这样做:不允许源类型“dynamic”或类型为“dynamic”的联接序列上的查询表达式。我认为您需要提供更多上下文。什么是
结果
?什么是result.Customers
?我的错误是我返回了一个dynamic而不是IEnumerable,这就是为什么我得到了异常。。。这都是动态的叹息。。。无论如何谢谢你。。。也谢谢@will his.Cast()让我想到。。。但它的工作原理就像@jdmichal所描述的,谢谢…很好的解释。谢谢你的链接。