LiteDB のコレクション(テーブル)からレコードを取得する - C#
LiteDB のデータベース、コレクション(テーブル)からレコードを取得するコードを紹介します。
事前準備
こちらの記事のプログラムを作成し、データベースを作成し、レコードを挿入します。
プログラム例
UI
下図のフォームを作成します。ボタンが2つ配置されていますが、今回は[button2]のみを利用します。
コード
下記コードを記述します。button2 のクリックイベントを実装します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CreateDB
{
internal class MyRecord
{
public int id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public int Price { get; set; }
}
}
using LiteDB;
namespace CreateDB
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
LiteDatabase ldb = new LiteDatabase("MyDB.db");
ILiteCollection<MyRecord> cl = ldb.GetCollection<MyRecord>("my_table");
ILiteQueryable<MyRecord> result = cl.Query().Where(r => r.Code == "PD-002");
List<MyRecord> mlist = result.ToList();
foreach (MyRecord m in mlist) {
textBox1.Text += string.Format("{0:d} {1} {2} {3:d}",m.id, m.Name, m.Code, m.Price);
}
ldb.Dispose();
}
}
}
解説
LiteDatabaseオブジェクトを作成します。コンストラクタの引数にデータベースのファイル名を与えます。
LiteDatabase ldb = new LiteDatabase("MyDB.db");
LiteDatabaseオブジェクトのGetCollectionメソッドを呼び出して、コレクションオブジェクトを取得します。GetCollectionメソッドの第一引数にはコレクション名(テーブル名)を与えます。
ILiteCollection<MyRecord> cl = ldb.GetCollection<MyRecord>("my_table");
レコードを検索します。ILiteCollectionオブジェクトのQueryメソッドを呼び出し、ILiteQueryableオブジェクトを取得し、
ILiteQueryableオブジェクトのWhereメソッドを呼び出しレコードの検索を実行します。Whereメソッドの第一引数に与えたメソッドの戻り値がtrueとなるレコードを選択します。下記コードでは、Codeフィールドの値が "PD-002" のレコードを取得しています。
ILiteQueryable<MyRecord> result = cl.Query().Where(r => r.Code == "PD-002");
Whereメソッドで検索したレコードセットをToList()メソッドを呼び出し、リストに変換します。
List<MyRecord> mlist = result.ToList();
Listに変換した検索結果をテキストボックスに表示します。
foreach (MyRecord m in mlist) {
textBox1.Text += string.Format("{0:d} {1} {2} {3:d}",m.id, m.Name, m.Code, m.Price);
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button2]をクリックします。Codeの値が "PD-002" のレコードが検索され、id=2 のレコードがテキストボックスに表示されます。
検索条件を変更する
[button3]を配置し、以下のコードを追加します。
private void button3_Click(object sender, EventArgs e)
{
LiteDatabase ldb = new LiteDatabase("MyDB.db");
ILiteCollection<MyRecord> cl = ldb.GetCollection<MyRecord>("my_table");
ILiteQueryable<MyRecord> result = cl.Query().Where(r => r.Price > 100);
List<MyRecord> mlist = result.ToList();
foreach (MyRecord m in mlist) {
textBox1.Text += string.Format("{0:d} {1} {2} {3:d}\r\n", m.id, m.Name, m.Code, m.Price);
}
ldb.Dispose();
}
解説
Where メソッドでレコードの検索を実行します。下記のコードでは Price の値が 100より大きいレコードを取得します。
ILiteQueryable<MyRecord> result = cl.Query().Where(r => r.Price > 100);
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button3]をクリックします。Priceの値が100より大きいレコードが取得され、テキストボックスに表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用