GROUP JOINについて(Linq To Entities )

GROUP JOINについて今回は書きたいと思います。
前回のJOIN同様に微妙な感じですけど、参考になればと思います。

まずは検索から

Dim con As New DATABASS
Dim JoinList = con.AAA.GroupJoin(con.BBB, Function(x) x.ID, _
                     Function(y) y.ID, _
                     Function(x, z) New With { _
                         Key .ID = x.ID, _
                         Key .年齢 = x.年齢 _
                         Key .名前 = y.名前, _
                         Key .部署マスタ' = z, _
                     }) _
                    .Where(Function(x) CType(x.ID >= 30 And _
                                             x.年齢 >= 50), Boolean)) _
                    .OrderBy(Function(x) x.ID) _
                    .ThenBy(Function(x) x.年齢)

JOINとの違いです、
 1:「con.AAA.Join」→「con.AAA.GroupJoin
 2:「Function(x, y) New With { _」→「Function(x, z) New With { _」
 3:「Key .部署 = y.部署, _」→「Key .部署マスタ' = z, _」
この書き方により、できるテーブルの形が変わります。
 JOINの場合
  ・ID
  ・年齢
  ・名前
  ・部署名

 GROUP JOINの場合
  ・ID
  ・年齢
  ・名前
  ・部署マスタ'
   ・ID
   ・部署
   ・席番号
   ・部下数

要する基準となるテーブルに結合したいテーブルをまるまる結合した感じです。
これにより、結合すべきIDが見つからないときは部署マスタ'は作成されません。

出力も少し変わります。

For Each LoopData In JoinList
    GetListData = String.Empty
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.ID, String), 5, clsString.emLR.Left) & " "
    GetListData = GetListData & clsString.SetSpace(LoopData.年齢, 3, clsString.emLR.Right) & " "
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.名前, String), 20, clsString.emLR.Left) & " "
    If LoopData.部署マスタ'(0) Is Nothing Then
        GetListData = GetListData & String.Empty & " "
    Else
        GetListData = GetListData & clsString.SetSpace(JoinList1.部署マスタ'(0).部署, 10, clsString.emLR.Right)
    End If
    lstData.Items.Add(GetListData)
Next

色々やってみましたが、やはりJOINとGROUP JOINはややこしいですね。。。
テーブルが3つ以上の結合は次回書こうと思います。

書くことが出来ましたので記載しておきます。
mmdaics.hateblo.jp


以上。

JOINについて(Linq To Entities )

JOINについて今回は書きたいと思います。
ただ、あまりいい書き方では無いかもしれません。

まずは検索から

Dim con As New DATABASS
Dim JoinList = con.AAA.Join(con.BBB, Function(x) x.ID, _
                     Function(y) y.ID, _
                     Function(x, y) New With { _
                         Key .ID = x.ID, _
                         Key .年齢 = x.年齢 _
                         Key .名前 = y.名前, _
                         Key .部署 = y.部署, _
                     }) _
                    .Where(Function(x) CType(x.ID >= 30 And _
                                             x.年齢 >= 50), Boolean)) _
                    .OrderBy(Function(x) x.ID) _
                    .ThenBy(Function(x) x.年齢)

「Function(y) y.ID,」の箇所ですが、Ctrl + Spaceで予測変換しても正しく出てくれないので自分で手打ちしました。
その御蔭で結構な時間悩んでましたね(´・ω・`)

出力はいつもと同様ですね

For Each LoopData In JoinList
    GetListData = String.Empty
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.ID, String), 5, clsString.emLR.Left) & " "
    GetListData = GetListData & clsString.SetSpace(LoopData.年齢, 3, clsString.emLR.Right) & " "
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.名前, String), 20, clsString.emLR.Left) & " "
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.部署, String), 10, clsString.emLR.Right)
    lstData.Items.Add(GetListData)
Next

なんだかんだで、使い方はわかってきたのですが本当にこれでいいのか!?って言う保証は無いです、、、

以上。

Whereで複数条件を指定した場合の記述(Linq To Entities )

今回は、Where区で複数条件を指定してデータを取得する方法です。

Dim con As New DB
Dim getdata as AAA () = con.AAA.Where(Function(x) x.ID = CType(txtID.Text, Integer) And _
                                               x.部署 = CType(txtBuCd.Text, Integer)).ToArray

ただし、Option Strictが「ON」の場合は上記の書き方だと波線が表示されコンパイルがうまくいかない。
f:id:daichi-t-0123:20160914103854p:plain

その場合は、下記のようにして対応した。
んー、微妙な感じですけど。。。。良い方法ないですかね。。。

Dim con As New DB
Dim getdata as AAA () = con.AAA.Where(Function(x) Ctype(x.ID = CType(txtID.Text, Integer) And _
                                       x.部署 = CType(txtBuCd.Text, Integer), Boolean)).ToArray

上記のデータを取り出したいときは下記のようにして取り出せます。

if getdata.Count > 0 then
   txtNm.text = getdata(0).名前
   txtAg.text = getdata(0).年齢
end if

※1件だけを出力したい時とかに使えると思います。

以上!

Raspberry Piのホスト名を変更してみよう!

IPを固定にしていないRaspberry Piに接続したい時にわざわざIPを調べるのは面倒ですよね。
なので、ホスト名を設定してホスト名で接続しようと思います。
※あと、Raspberry Piの方に「Samba」入れてwindowsからアクセスできる共有フォルダを作成しておいて下さい。

<今回用意したもの>

<作業開始!>

基本的にRaspberry Piで作業してもらえば大丈夫です。
Tera Termなどのソフトがwindows側に入っているのであれば、
そちらからでも変更可能です。

Raspberry Piの環境を最新に!
$ sudo apt-get update

何か導入するときとかは基本的にこのコマンド打ちますよね。
私はお約束って感じで捉えてますが、実際はどうなんでしょうね(^^;)

Avahiが導入されているか確認!
$ sudo apt-get install avahi-daemon

私が実施した際は先に誰かが入れたのか、すでに入っていました。
入っていない場合は、yを押してインストールして下さい。

ホスト名の変更!
$ sudo nano /etc/hostname

開くとホスト名が表示されます。
xxxxxxxx-desktopとなっていたので、「Raspics」と変更しました。
※xxxxxxxxが個人名だったので変更してます。
※nonaの使い方は探して下さい。私も使い方は知らずに適当に行ったので説明できないです(>w<)

$ sudo nano /etc/hosts

開くと「127.0.1.1」が記載されているところのxxxxxxxx-desktopを「Raspics」と変更します。
※必ず上で変更したホスト名と合わせて下さい。

Raspberry Piを再起動
$ sudo reboot
windowsからRaspberry Piの共有フォルダにアクセスする。
\\Raspics\pi

共有フォルダはpiとしていますので、上記のアドレスで接続できればOK!
この時、IDとPWを聞かれるかもしれません。

*1:OSは「Ubuntu mate」です。LAN接続済み

*2:OSは「win10」です。LAN接続済み

C++

Raspberry Pi用のプログラムをC++で書こうとしているのですが、
プログラムの構成を考えるのが大変ですね。。。

VBC#のようにはいかなさそうです。

進展があれば書いていきます。

でわ。

匿名性のデータ出力について(Linq To Entities )

Dim con As New DB
Dim getdata = (From A In con.IDList
          Group Join B In con.SyainList On A.社員コード Equals B.社員コード Into BList = Group From BL In BList.DefaultIfEmpty
          Where A.社員コード = CType(txtSyaID.Text, Integer) And B.年齢 >= CType(txtAeg.Text, Integer)
          Order By A.社員コード, BL.年齢
          Select A.社員コード, BL.社員名, BL.年齢)

上記のデータを取り出したいときは下記のようにして取り出す必要がある。

For Each getdata1 In getdata
         data = getdata1.社員コード
         data = data & " " & getdata1.社員名
         data = data & " " & getdata1.年齢
         ListBox1.Items.Add(data)
         Application.DoEvents()
Next

※A.社員コードではなく、getdata1.社員コードでした。(2016.09.12追記)

以上!

テスト投稿

今回からブログ書くことにしました。

更新は不定期になると思いますがよろしくお願いいたします。