LINQ to DataGridViewRowCollection - PullRequest
       4

LINQ to DataGridViewRowCollection

4 голосов
/ 08 февраля 2012

У меня есть немного загадки относительно запроса LINQ к DataGridViewRowCollection.Вот мой запрос (где "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:

Iтолько что наткнулся на следующую ссылку ... посмотрите принятый ответ ... это то, что я пытаюсь сделать.Почему-то я не могу заставить работать метод расширения IEnumerable.Cast () ... что мне не хватает?

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012

На самом деле я не думаю, что ваш код выглядит именно так.Поскольку DataGridViewRowCollection не реализует IEnumerable<DataGridViewRow>, вы должны использовать Cast<DataGridViewRow>(), например:

var rows = from row in grid.Rows.Cast<DataGridViewRow>()
           where row.Selected
           select row;
1 голос
/ 08 февраля 2012

Попробуйте перефразировать запрос linq:

var rows = dgv.Rows
           .Where(x => x.Selected);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...