タグ(Id、Name)という名前のデータベーステーブルがあり、そこから名前がリスト内の名前と一致するものを選択したいと思います。SQLでは、次のようなものを使用します。
Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)
しかし、現在ASP.Net MVC3プロジェクトでPetaPocoを使用しているので、それを適切に行う方法を理解するのに行き詰まっています。これまでに試しました:
var tagsToFind = new string[] { "SqlServer", "IIS" };
var sql = PetaPoco.Sql.Builder.Select("*").From("Tags").Where("Name in (@0)", tagsToFind);
var result = db.Query<Tag>(sql);
これにより、次のSQLが生成されます。ここでは、tagsToFindのリストの名のみが、すべてではなく、テーブルデータの照合に使用されます。
SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"
これはおそらくそれほど難しいことではないことを知っているので、少しイライラします。助けていただければ幸いです。
更新: 別の方法で実行できることがわかりました
var sql = PetaPoco.Sql.Builder.Append("Select * from tags Where Name IN (@0", tagNames[0]);
foreach (string tagName in tagNames.Where(x => x != tagNames[0])) {
sql.Append(", @0", tagName);
}
sql.Append(")");
var result = db.Query<Tag>(sql)
これにより、sqlparametersを使用しているときに必要なものが得られます。とてもきれいではありませんが、今のところは十分だと思います。
/マイク