小编new*_*azy的帖子

为什么LINQ使用Data.DataTableCollection进行转换

这个问题是"使用Data.DataTableCollection进行LINQ强制转换"的连续问题,这里是使用Data.DataTableCollection @Lasse Espeholt 的链接[问题] LINQ强制转换

我遇到同样的情况.我想对集合DataTableCollection进行LINQ查询.但是,如果我写下以下代码:

from dataTable in dataSet.Tables
Run Code Online (Sandbox Code Playgroud)

visual studio将报告错误"无法找到源类型'System.Data.DataTableCollection'的查询模式的实现".所以解决方案是将代码更改为:

from dataTable in dataSet.Tables.Cast<DataTable> ()
Run Code Online (Sandbox Code Playgroud)

所以我从互联网上挖掘了根本原因.我发现了一些线索,"典型的LINQ to Objects查询表达式不仅需要一个实现IEnumerable的类作为其数据源,而且它还返回一个相同类型的实例." 在这个页面.所以我想知道DataTableCollection不会继承IEnumerable接口.但根据我在MSDN中检查,我发现DataTableCollection的继承关系如下:

DataTableCollection
    InternalDataCollectionBase
        ICollection
            IEnumerable
Run Code Online (Sandbox Code Playgroud)

所以这种继承关系意味着DataTableCollection只继承IEnumerable接口,不继承IEnumerable接口.所以它不能支持LINQ查询.并且解决方案是使用cast方法将变换转换为IEnumerable然后可以进行LINQ查询.

所以我的总结作为想要启用LINQ功能的类来对象,它必须继承IEnumerable和IEnumerable这两个接口.

我的总结是对的吗?IEnumerable和IEnumerable之间有什么区别?

c# linq

3
推荐指数
1
解决办法
3231
查看次数

标签 统计

c# ×1

linq ×1