首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataView上的LINQ

DataView上的LINQ
EN

Stack Overflow用户
提问于 2012-02-01 03:46:48
回答 2查看 5.9K关注 0票数 3

我不能在没有强制转换的情况下查询DataView。方法IsPresent中的两行代码取自"“,似乎对每个人都适用,只有一个注释除外。我正在“使用”LINQ命名空间,那么我的问题是什么?

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2012-02-01 04:00:45

尝试像在Main方法中所做的那样,对表进行如下转换:

代码语言:javascript
复制
            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>()作为您的主要方法,这也编译了。

票数 2
EN

Stack Overflow用户

发布于 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 )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9090479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档