この質問は、「Data.DataTableCollection を使用した LINQ キャスティング」の継続的な質問です。ここに [質問] Data.DataTableCollection を使用した LINQ キャスティング @Lasse Espeholtがあります。
私も同じ状況です。コレクション DataTableCollection に対して LINQ クエリを実行したいと考えています。しかし、次のコードを書き留めると:
from dataTable in dataSet.Tables
ビジュアル スタジオは、「ソース タイプ 'System.Data.DataTableCollection' のクエリ パターンの実装が見つかりませんでした」というエラーを報告します。したがって、解決策はコードを次のように変更することです。
from dataTable in dataSet.Tables.Cast<DataTable> ()
だから私はインターネットから根本的な原因を掘り起こします。そして、「典型的な LINQ to Objects クエリ式は、データ ソースとして IEnumerable を実装するクラスを取得するだけでなく、同じ型のインスタンスも返す」という手がかりを見つけました。このページで。だから、DataTableCollection はインターフェイス IEnumerable を継承しないのだろうか。しかし、MSDN で確認したところ、DataTableCollection の継承関係は次のようになっていることがわかりました。
DataTableCollection
InternalDataCollectionBase
ICollection
IEnumerable
したがって、この継承関係は、DataTableCollection がインターフェイス IEnumerable のみを継承し、インターフェイス IEnumerable を継承しないことを意味します。そのため、LINQ クエリをサポートできません。そして解決策は、キャストメソッドを使用してIEnumerableに変換し、LINQクエリを実行できるようにすることです。
したがって、LINQ to object の機能を有効にしたいクラスとしての私の要約は、インターフェイス IEnumerable と IEnumerable の両方を継承する必要があります。
私の要約は正しいですか?IEnumerable と IEnumerable の違いは何ですか?