差分
ナビゲーションに移動
検索に移動
編集の要約なし
==注意==
これは[[ServiceStack OrmLite]]ではなく[[NServiceKit OrmLite]]のお話です。
==SELECT==
===ExpressionVisitor<T>===
OrmLiteのSELECTメソッドはWHERE句に相当する。中身はLINQでも直書きSQLでも受け付ける。
ただSELECTメソッドは[[遅延評価]]ではなく、いきなり実行される。このためLINQを使った場合は、複数の条件式を徐々に組み立てたり、ORDER BY句によるソートなども一切出来ない。これでは使い物にならない。
そのような用途のためにOrmLiteConfig.DialectProvider.ExpressionVisitor<T>が用意されている。
ExpressionVisitorを用いてクエリを組み立て、最後にSELECTメソッドに食わせてやるという、いわゆるSqlBuilderである。
ExpressionVisitorが吐き出すSQL文はデータベースに依存するためOrmLiteConfig.DialectProviderから生成するようになっている。一部のデータベースではExpressionVisitorが完璧に実装されていない開発途上のものも存在するので注意を要する。とりあえずMySQLのものはそこそこ動くようだ。
<source lang="csharp">
OrmLiteConfig.DialectProvider = MySqlDialectProvider.Instance;
var cs = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;
var db = cs.OpenDbConnection();
db.CreateTable<User>(overwrite: true);
db.Insert<User>(new User { Id = 1, Name = "上級国民", });
db.Insert<User>(new User { Id = 2, Name = "一般国民", });
db.Insert<User>(new User { Id = 3, Name = "その他", });
var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<User>();
ev.Where(x => x.Id == 2);
ev.Or(x => x.Id == 3);
var rows = db.Select(ev);
</source>
==関連項目==