我不能在没有强制转换的情况下查询DataView。方法IsPresent中的两行代码取自"“,似乎对每个人都适用,只有一个注释除外。我正在“使用”LINQ命名空间,那么我的问题是什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// works
DataView o = new DataView();
var p = from x in o.Cast<DataRowView>() where x.Row.Field<bool>("xxx") select x.Row;
}
public static bool IsPresent(DataView dvDataTag, string colName)
{
// does not work
int count = dvDataTag.Count(drv => string.Equals("1", drv[colName].ToString()));
return dvDataTag.Any(drv => string.Equals("1", drv[colName].ToString()));
}
}
}错误2 'System.Data.DataView‘不包含'Any’的定义,也没有扩展方法'Any‘接受'System.Data.DataView’类型的第一个参数的定义(您是缺少使用指令还是程序集引用?)A:\TEMP\ConsoleApplication1\ConsoleApplication1\Program.cs ConsoleApplication1 20 20
发布于 2012-02-01 04:00:45
尝试像在Main方法中所做的那样,对表进行如下转换:
int count = dvDataTag.OfType<DataRowView>().Count(drv => string.Equals("1", drv[colName].ToString()));
return dvDataTag.OfType<DataRowView>().Any(drv => string.Equals("1", drv[colName].ToString()));我还尝试了.Cast<DataRowView>()作为您的主要方法,这也编译了。
发布于 2020-10-02 14:49:50
这是因为DataView实现了非泛型IEnumerable ( Does LINQ work with IEnumerable? )。最重要的是,由于DataView枚举数返回DataRowView类型的对象,所以更令人困惑。
使用.Cast<DataRowView>() Linq方法,因为您知道它们都是这种类型的。从技术上讲,您可以不使用.OfType<DataRowView>(),但是要注意,它将无声地忽略集合中任何不是该类型的对象,而Cast则会抛出异常( https://stackoverflow.com/a/4015967/530545 )。
https://stackoverflow.com/questions/9090479
复制相似问题