LINQ to DataGridViewRowCollection

时间:2012-02-08 14:29:38

标签: c# linq datagridview

关于DataGridViewRowCollection上的LINQ查询,我有点神秘。这是我的查询(其中“grid”是DataGridView对象):

var rows = from DataGridViewRow row in grid.Rows
           where row.Selected
           select row;

我有一个包含此查询的项目,它可以完美执行。问题是在另一个项目中,当我尝试构建解决方案时出现以下错误:

error CS1936: Could not find an implementation of the query pattern for source type 'System.Windows.Forms.DataGridViewRow'.  'Where' not found.

起初我认为这是一个参考问题,但我在两个项目中使用相同的引用:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Data.EntityModel;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Diagnostics;

有没有人知道为什么我的LINQ查询可以在一个项目中工作而不能在另一个项目中工作?

编辑1:

对于记录,以下是查询 工作的确切上下文:

public List<Int64> ComponentIDs
{
    get
    {
        return
            (
                from DataGridViewRow row in grid.Rows
                where row.Selected
                select (Int64)row.Cells[0].Value

            ).ToList();

    }

}

编辑2:

我刚刚遇到以下link ...看到接受的答案......这就是我想要做的。出于某种原因,我无法使IEnumerable.Cast()扩展方法起作用......我缺少什么?

2 个答案:

答案 0 :(得分:6)

实际上我认为你的代码看起来并不完全一样。由于DataGridViewRowCollection未实现IEnumerable<DataGridViewRow>,您必须使用Cast<DataGridViewRow>(),如下所示:

var rows = from row in grid.Rows.Cast<DataGridViewRow>()
           where row.Selected
           select row;

答案 1 :(得分:1)

尝试将linq查询重新编写为:

var rows = dgv.Rows
           .Where(x => x.Selected);