VB.NETでPostgreSQL 条件を指定してレコードを検索する(Entity Framework使用)
以下の記事の続きです。
次は条件を指定した検索処理を行いたいと思います。
前回のテーブルを少し修正し以下のようにします。
何期生かをレコードに持たせるようにしました。
create table Users ( id serial , name character varying(30) , generation integer , constraint Users_PKC primary key (id) ) ; comment on table Users is 'Users'; comment on column Users.id is 'ID'; comment on column Users.name is '名前'; comment on column Users.generation is '期';
Userクラスも以下のように修正します。
Imports System.ComponentModel.DataAnnotations Imports System.ComponentModel.DataAnnotations.Schema <Table("users")> Public Class User <Key> <Column("id")> Public Property Id As Long <Column("name")> Public Property Name As String <Column("generation")> Public Property Generation As Integer End Class
テーブルの中身は以下のようになっています。
主キーで検索する
UserRepositoryクラスに以下のメソッドを追加します。
主キーであるidを引数に、usersテーブルから該当するレコードを1件返すメソッドです。
Public Function FindById(ByVal id As Long) As User Return context.Users.Find(id) End Function
Formに適当にボタンを作成し、クリックイベントを以下のようにします。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim userRepo As New UserRepository() Dim user = userRepo.FindById(1) MessageBox.Show(user.Name) End Sub
検索出来ました。
主キー以外の条件で検索する
次に主キー以外の項目で検索をしてみようと思います。
追加したgenerationカラムで検索をします。
UserRepositoryクラスに以下のメソッドを追加します。
generationが引数と同じ値のレコードをリストにして返すメソッドです。
Public Function FindByGeneration(ByVal generation As Integer) As List(Of User) Return context.Users.Where(Function(u) u.Generation = generation).ToList() End Function
Formに適当にボタンを作成し、クリックイベントを以下のようにします。
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim userRepo As New UserRepository() Dim list = userRepo.FindByGeneration(9) Dim message As New StringBuilder() list.ForEach(Sub(l) message.Append(l.Id).Append(vbTab).AppendLine(l.Name)) MessageBox.Show(message.ToString()) End Sub
9期のメンバーだけ検索することが出来ました。