我有客户IEnumerable<Customer>
IEnumerable的<dynamic> LINQ表达式
现在我想有从该名单上disctinct公司名称的动态列表?
我想我可以做类似
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但今天学到,我不能...... 我怎么能建立这样的查询?
我有客户IEnumerable<Customer>
IEnumerable的<dynamic> LINQ表达式
现在我想有从该名单上disctinct公司名称的动态列表?
我想我可以做类似
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但今天学到,我不能...... 我怎么能建立这样的查询?
只要Customer
类有一个成员CompanyName
,你绝对可以做到以下几点:
var companies = (from c in result.Customers
select c.CompanyName).Distinct();
没有优势,使用的dynamic
关键字在var
这里,比一个事实,即它会阻止其他编译器出现错误。
不能这样做:查询表达式超过源类型'dynamic'或类型'dynamic'的连接序列是不允许的 – 2011-03-21 11:44:18
我认为你需要提供更多的上下文。什么是'结果'?什么是'结果。客户'? – jdmichal 2011-03-21 11:49:09
我的错我回到了一个动态的,而不是IEnumerable
你在代码中做什么以及你在问题标题中问什么是两个不同的东西。
如果你想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>。这将检查被枚举的类型并试图找出如何处理它(链接详细描述了这一点)。
这一切都像广告一样工作,除非动态处理的类型不能由默认的相等比较器处理。在这种情况下,您必须使用采用自定义相等比较器的重写。
很好的解释。并感谢您的链接。 – 2011-06-27 15:33:19
你不能只使用var? – Manatherin 2011-03-21 11:23:44