LINQ行索引检索转换要求

时间:2012-11-22 21:36:01

标签: c# .net winforms linq

全部,我在DataGridView(DGV)中有行。要测试添加到此DGV的项目是否已存在,我编写了一个方法,该方法使用以下LINQ查询返回匹配行的行索引(而不是for/foeach循环):

IEnumerable<int> rowCol = this.dataGridViewAttachList.Rows.Cast<DataGridViewRow>()
    .Where(row => row.Cells[(int)DgvColumns.DatabaseName].Value.ToString()
        .Equals(databaseName, StringComparison.OrdinalIgnoreCase))
    .Select(row => row.Index);

我的问题是:为什么我必须使用Cast<DataGridViewRow>()进行投射?我首先尝试过没有它,我花了一段时间来解决这个问题;但我不清楚为什么有必要呢?

感谢您的时间。

3 个答案:

答案 0 :(得分:5)

这是因为DataGridViewRowCollection实现了IEnumerable而不是IEnumerable<DataGridViewRow>

答案 1 :(得分:1)

DataGridView。行的类型为DataGridViewRowCollection,实现IEnumerable。 LINQ扩展方法需要IEnumerable<T>

答案 2 :(得分:1)

这是因为DataGridViewRowCollection(Rows属性的类型)是非通用的IEnumerable。因此,要获得linq可以使用的通用版IEnumerable<DataGridViewRow>,您应该调用。Cast<DataGridViewRow>()