LINQで書きたいのですが への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 大池  (社会人) 投稿日時 2012/1/23 20:37:21
shu様 魔界の仮面弁士様

いつも迅速、丁寧なご指導ありがとございます。
うまくいきました。
AsDataView.ToTableは初めて知りました。

魔界の仮面弁士様には以前ImportRowのご指導をいただきました。
これで十分でしたが、LINQに触れますとつい置き換えたくなり、
この場に甘えてしまいました。

いただきましたヒント DataViewのRowFilter、DataSet1 の Merge メソッド
につきましては今後勉強してまいりたいと思っています。
これからもよろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/1/23 18:36:28
> 型付きのままにしたければFor Eachループは必要になると思います。

DataSet1 の Merge メソッドを使うとか。
投稿者 shu  (社会人) 投稿日時 2012/1/23 07:42:24
Dim tbl As DataTable =  (From row in DataSet1.DataTable1 _
                                  Where CInt(row.生誕年) > 1830).AsDataView.ToTable

で型なしDataTableにすることは出来ます。

型付きのままにしたければFor Eachループは必要になると思います。

別テーブル、別Datarowを作成する必要がなければDataViewのRowFilterを使用する
のもいいかもしれません。(上記AsDataViewまでと同等)
投稿者 大池  (社会人) 投稿日時 2012/1/22 21:27:36
いつもお世話になっています。
XPでVB2008を勉強しています。
本中学校でLINQ講座を勉強させていただいています。
DataTableのデータから抽出したものを別のDataTableに保存するために
下記プログラムを以前本掲示板でご指導していただきました。
ここで Private Sub btn抽出ByVB_Click・・・をLINQで実行したく
いろいろ試したのですが、うまくいきません。
厚かましいお願いですがどのように記述すればいいかご指導のほど
よろしくお願いいたします。

     記

  DataSet1 で    id,名前,フリガナ,生誕年,所属 を定義しています。
 
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '(1): データ設定
        Dim dt As DataSet1.DataTable1DataTable = DataSet1.DataTable1
        dt.AddDataTable1Row("001", "勝", "カツ", "1823", "幕府")
        dt.AddDataTable1Row("002", "岩倉", "イワクラ", "1825", "公家")
        dt.AddDataTable1Row("003", "西郷", "サイゴウ", "1828", "薩摩")
        dt.AddDataTable1Row("004", "大久保", "オオクボ", "1830", "薩摩")
        dt.AddDataTable1Row("005", "木戸", "キド", "1833", "長州")
        '
    End Sub

    Private Sub btn抽出ByVB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn抽出ByVB.Click
        '  
        Dim tbl As DataTable = New DataSet1.DataTable1DataTable
        For Each dr As DataSet1.DataTable1Row In DataSet1.DataTable1
            If CType(dr.生誕年, Integer) >= 1830 Then
                'tbl.Rows.Add(dr.id, dr.名前, dr.フリガナ, dr.生誕年, dr.所属)
                tbl.ImportRow(dr)
            End If
        Next
        DataGridView2.DataSource = tbl
    End Sub