すいません、VB4しかやってないんです、VBAはやったけど(ぼそ) チラシの裏だって立派な書き込み空間なんだからねっ!資源の有効活用なんだからねっ!とか偉そうに言ってるけど、実は色々と書き残したいだけ

だからなに? どうしろと? くるみサイズの脳みそしかないあやしいジャンガリアンベムスターがさすらう贖罪蹂躙(ゴシックペナルティ)

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  632  : 記事  35  : コメント  11686  : トラックバック  143

ニュース


片桐 継 は
こんなやつ

かたぎり つぐ ってよむの

大阪生まれ河内育ちなんだけど
関東に住みついちゃったの
和装着付師だったりするの
エセモノカキやってたりするの
VBが得意だったりするの
SQL文が大好きだったりするの
囲碁修行中だったりするの
ボトゲ好きだったりするの
F#かわいいよF#

正体は会った人だけ知ってるの

空気読まなくてごめんなさいなの


わんくまリンク

C#, VB.NET 掲示板
C# VB.NET掲示板

わんくま同盟
わんくま同盟Blog


WindowsでGo言語
WindowsでGo言語


ネット活動


SNSは疲れました

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

イベント活動

プログラムの活動

というわけで覚書

まずは、ネタ元のペンギンテーブルを作成

Private Sub SetPenguins()

    Dim PenguinName() = {"フンボルトペンギン", "コビトペンギン", "イワトビペンギン", "コウテイペンギン"}
    Dim PenguinSize() = {60, 38, 61, 120}
    Dim PenguinLiving() = {"南アメリカ", "オーストラリア", "フォークランド諸島", "南極"}
    Dim PenguinNestle() = {"岩場", "巣穴", "岩場", "氷上"}

    Penguins = New DataTable
    Penguins.Columns.Add("Name", GetType(String))
    Penguins.Columns.Add("Size", GetType(Integer))
    Penguins.Columns.Add("Living", GetType(String))
    Penguins.Columns.Add("Nestle", GetType(String))

    Dim Penguin As DataRow
    For i = LBound(PenguinName) To UBound(PenguinName)

      Penguin = Penguins.NewRow()

      Penguin.Item("Name") = PenguinName(i)
      Penguin.Item("Size") = PenguinSize(i)
      Penguin.Item("Living") = PenguinLiving(i)
      Penguin.Item("Nestle") = PenguinNestle(i)

      Penguins.Rows.Add(Penguin)

    Next

  End Sub
あんまりここは代わり映えなく(笑)←おいこら
というわけで、このDataTableから色んなペンギンを探し出します
Dim msg = ""
SetPenguins()

msg = ""
Dim AllPenguin = From Pen In Penguins
For Each PenPen In AllPenguin
  msg += Join(PenPen.ItemArray, ":") & Chr(13)
Next
MsgBox(msg, , "全部のペンギン")

msg = ""
Dim MinPentuin = From Pen In Penguins Order By Pen.Item("Size") Take 1
For Each PenPen In MinPentuin
  msg = PenPen.Item("Name").ToString
Next
MsgBox(msg, , "最小のペンギン")

msg = ""
Dim MaxPentuin = From Pen In Penguins Order By Pen.Item("Size") Descending Take 1
For Each PenPen In MaxPentuin
  msg = PenPen.Item("Name").ToString
Next
MsgBox(msg, , "最大のペンギン")

msg = ""
Dim RockPenguin = From Pen In Penguins Where Pen.Item("Nestle").ToString = "岩場"
For Each PenPen In RockPenguin
  msg += PenPen.Item("Name").ToString & Chr(13)
Next
MsgBox(msg, , "岩場に営巣するペンギン")

で動かすと

WS000000 WS000001? WS000002WS000003

こんな感じで出てきます。DataTableからデータをLINQした場合、取得するデータ型はDataRowCollectionとなります。Dimの後ろには変数を指定しているだけなので、VB.NET側で「じゃ、DataRowCollectionでよろしく」というわけですね

DataTableにあったSelectメソッドよりも柔軟な条件設定ができるのが大きい利点だと思うですよ

投稿日時 : 2007年12月31日 11:56

コメント

# re: LINQ with VisualBasic.NET ~ペンギンをさがそう~ 2007/12/31 19:43 けろ-みお
質問!素人考えな質問なんだけど、
Dimしなくても、できる?

For Each PenPen In From Pen In Penguins Order By Pen.Item("Size") Take 1
msg = PenPen.Item("Name").ToString
Next
MsgBox(msg, , "最小のペンギン")

は、ダメなのかしら?
(確認してないからわからないですけど)
こっちの方が私は柔軟性があると思うけど・・・
(可読性という意味では微妙なところではあるけどねw)


# re: LINQ with VisualBasic.NET ~ペンギンをさがそう~ 2008/01/01 13:29 片桐
>けろたん

可能、というか、私が自分用に書くならそうしますですよ

VS2008になって、型推論を前提にした作り方がデフォルトになりそうなので、そこんところを明確にしたコードにしてみたですよ(^^;


# LINQ with VisualBasic.NET ~ペンギンを数えよう~ 2008/01/01 22:14 すいません、VB4しかやってないんです、VBAはやったけど(ぼそ)
LINQ with VisualBasic.NET ~ペンギンを数えよう~

Post Feedback

タイトル
名前
Url:
コメント