none
クエリによるDataTableの作成について(LINQ to DataSet)  RRS feed

  • 質問

  • VB,LINQをやり始めた者で理解できていないところが多々あります。
    その中で、クエリによるDataTableを作成したく、「クエリによる DataTable の作成 (LINQ to DataSet)」 http://msdn.microsoft.com/ja-jp/library/bb386921.aspx などなど参考に色々試みていますが、以下のエラーでてしまいます。
    エラー内容: 'CopyToDataTable' は 'System.Collections.Generic.IEnumerable(Of <匿名型>)' のメンバではありません。 
    エラーの出るソース: 
    -----------------------------------------------------------------------------------------------------
    Option Explicit On
    Imports System
    Imports System.Linq
    Imports System.Linq.Expressions
    Imports System.Collections.Generic
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.Common
    Imports System.Globalization

    Public Class Item
        Private _Id As Int32
        Private _Price As Double
        Private _Genre As String

        Public Property Id() As Int32
            Get
                Return Id
            End Get
            Set(ByVal value As Int32)
                _Id = value
            End Set
        End Property

        Public Property Price() As Double
            Get
                Return _Price
            End Get
            Set(ByVal value As Double)
                _Price = value
            End Set
        End Property

        Public Property Genre() As String
            Get
                Return _Genre
            End Get
            Set(ByVal value As String)
                _Genre = value
            End Set
        End Property

    End Class
    Public Class Book
        Inherits Item
        Private _Author As String
        Public Property Author() As String
            Get
                Return _Author
            End Get
            Set(ByVal value As String)
                _Author = value
            End Set
        End Property
    End Class

    Public Class Movie
        Inherits Item
        Private _Director As String
        Public Property Director() As String
            Get
                Return _Director
            End Get
            Set(ByVal value As String)
                _Director = value
            End Set
        End Property

    End Class


    Module A

        Sub main()
            Dim book1 As New Book()

            book1.Id = 1
            book1.Price = 13.5
            book1.Genre = "Comedy"
            book1.Author = "Gustavo Achong"

            Dim book2 As New Book
            book2.Id = 2
            book2.Price = 8.5
            book2.Genre = "Drama"
            book2.Author = "Jessie Zeng"

            Dim movie1 As New Movie
            movie1.Id = 1
            movie1.Price = 22.99
            movie1.Genre = "Comedy"
            movie1.Director = "Marissa Barnes"

            Dim movie2 As New Movie
            movie2.Id = 1
            movie2.Price = 13.4
            movie2.Genre = "Action"
            movie2.Director = "Emmanuel Fernandez"

            Dim items(3) As Item
            items(0) = book1
            items(1) = book2
            items(2) = movie1
            items(3) = movie2

            ' Query for items with price greater than 9.99.
            Dim query = From i In items _
                        Where i.Price > 9.99 _
                        Order By i.Price _
                        Select New With {i.Price, i.Genre}

            Dim table As DataTable
            table = query.CopyToDataTable()
        End Sub
    End Module
    -----------------------------------------------------------------------------------------------------
    質問です。: 
    1.なぜ、エラーとなるのでしょうか。(自分としては、お手本通り作成しているつもりです。)

    2.上記のようなクエリから作成し、匿名型となるデータをDataTableに設定する方法は、CopyToDataTable以外に方法はありませんか?

    2009年5月31日 9:31

回答

すべての返信

  • 参考にされているページには、こちらに書かれているコードが必要です。

    方法 : ジェネリック型 T が DataRow ではない CopyToDataTable<T> を実装する
    http://msdn.microsoft.com/ja-jp/library/bb669096.aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月31日 15:40
    モデレータ
  • ご回答ありがとう。
    ご回答いただいたページを参考にしてやってみます。

    2009年5月31日 23:08
  •  こんにちは、フォーラムオペレータの高橋春樹です。
     
     trapemiyaさん、いつもお世話になっています。
     ご投稿有難うございました。
     
     endonさん、はじめまして。
     MSDNフォーラムのご利用ありがとうございます。
     
     trapemiyaさんからアドバイスを頂いたと思うのですが、
     如何でしょう!試して頂けましたでしょうか(^-^)
     
     今回、trapemiyaさんのアドバイスに、回答マークを付けさせてもらいました。
     不明な点などがありましたら回答マークを削除することも可能です。
     
     今後ともMSDNフォーラムをよろしくお願いします。
    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年6月25日 7:13