LINQで書きたいのですが への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/1/23 18:36:28
> 型付きのままにしたければFor Eachループは必要になると思います。
DataSet1 の Merge メソッドを使うとか。
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までと同等)
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
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
いつも迅速、丁寧なご指導ありがとございます。
うまくいきました。
AsDataView.ToTableは初めて知りました。
魔界の仮面弁士様には以前ImportRowのご指導をいただきました。
これで十分でしたが、LINQに触れますとつい置き換えたくなり、
この場に甘えてしまいました。
いただきましたヒント DataViewのRowFilter、DataSet1 の Merge メソッド
につきましては今後勉強してまいりたいと思っています。
これからもよろしくお願いいたします。