为什么这个简单的LINQ查询语法语句不能转换为方法语法?

时间:2011-09-23 00:10:40

标签: .net c#-4.0

这是查询语法版本:

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);
编译器拒绝的

- “没有扩展方法在哪里......可以找到”?

怎么了?

1 个答案:

答案 0 :(得分:1)

因为您具有查询语法版本中指定的类型。 (from DataGridViewRow row中的DataGridViewRow。)

要翻译此内容,您需要Cast<T>

IEnumerable<DataGridViewRow> a2 = mydgvrs.Cast<DataGridViewRow>()
                                         .Where(row => row.Height > 0);

这是必需的,因为mydgvrs实现了IEnumerable,而不是IEnumerable<DataGridViewRow>