最新版 |
編集中の文章 |
4行目: |
4行目: |
| ==注意== | | ==注意== |
| これは[[ServiceStack OrmLite]]ではなく[[NServiceKit OrmLite]]のお話です。 | | これは[[ServiceStack OrmLite]]ではなく[[NServiceKit OrmLite]]のお話です。 |
− |
| |
− | ==SELECT==
| |
− | ===一般的なSELECT===
| |
− | [[英語]]が読めなくても見ればわかる。
| |
− | *https://github.com/NServiceKit/NServiceKit.OrmLite/blob/master/README.md
| |
− |
| |
− | ===SqlExpressionVisitor<T>クラスを用いる===
| |
− | OrmLiteのSELECTメソッドはWHERE句に相当する。中身はLINQでも直書きSQLでも受け付ける。
| |
− |
| |
− | ただSELECTメソッドは[[遅延評価]]ではなく、いきなり実行される。このためLINQを使った場合は、複数の条件式を徐々に組み立てたり、ORDER BY句によるソートなども一切出来ない。これでは使い物にならない。
| |
− |
| |
− | そのような用途のためにSqlExpressionVisitor<T>クラスが用意されている。
| |
− | SqlExpressionVisitorを用いてクエリを組み立て、最後にSELECTメソッドに食わせてやるという、いわゆるSqlBuilderである。
| |
− |
| |
− | SqlExpressionVisitorが吐き出すSQL文はデータベースに依存するため、事前にOrmLiteConfig.DialectProviderを適切に設定したうえで、ExpressionVisitor<T>()メソッドでインスタンスを取得するようになっている。
| |
− |
| |
− | なお、一部のデータベースではSqlExpressionVisitorの派生クラスが完璧に実装されていない開発途上のものも存在するので注意を要する。とりあえず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>
| |
| | | |
| ==関連項目== | | ==関連項目== |
48行目: |
13行目: |
| | | |
| {{stub}} | | {{stub}} |
− |
| |
− | [[category:NServiceKit]]
| |