LINQ to DataGridViewRowCollection

本文关键字:DataGridViewRowCollection to LINQ | 更新日期: 2023-09-27 18:23:59

关于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:

我刚刚看到以下链接。。。查看已接受的答案。。。这就是我要做的。由于某些原因,我无法使IEnumerable.Cast()扩展方法工作。。。我错过了什么?

LINQ to DataGridViewRowCollection

实际上,我不认为您的代码看起来完全像那样。由于DataGridViewRowCollection不实现IEnumerable<DataGridViewRow>,您必须像这样使用Cast<DataGridViewRow>()

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