0
这里的查询语法版本:为什么这个简单的LINQ查询语法语句不能转换为方法语法?
DataGridViewRowCollection mydgvrs = new DataGridView().Rows;
IEnumerable<DataGridViewRow> a =
from DataGridViewRow row in mydgvrs
where row.Height > 0
select row;
这是很好的,和方法的语法版本:
IEnumerable<DataGridViewRow> a2 =
mydgvrs.Where(row => row.Height > 0);
该编译器拒绝 - “没有扩展方法在哪里?可以找到”?
这是怎么回事?
谢谢里德,这工作。但我不明白为什么需要Enumerable.Cast。当然,它会将DataGridViewRow对象转换为DataGridViewRow,即不改变类型。也就是说,它已经有了它需要的类型信息。如果你有时间,请善举解释一下。谢谢。 –
ChrisJJ
@ChrisJJ:mydgvrs可能是一个'DataGridViewRowCollection',它早于泛型。如果你看看文档,它实现了'IEnumerable',但是不是**'IEnumerable'。该方法只是将它看作一堆没有强制转换的'System.Object'实例。这就是为什么你的查询语法需要'从DataGridViewRow行'而不是'从行' - 通常,你不需要那里的类型说明。 –
@ChrisJJ:参考这个类的文档:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrowcollection.aspx –