关于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()扩展方法工作……我错过了什么?
解决方法:
实际上我不认为你的代码看起来完全一样.由于DataGridViewRowCollection未实现IEnumerable< DataGridViewRow>你必须像这样使用Cast< DataGridViewRow>():
var rows = from row in grid.Rows.Cast<DataGridViewRow>()
where row.Selected
select row;