我有一个名为 Tags (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 时得到了我想要的东西。所以我想它现在已经足够好了,虽然不是超级漂亮。
/麦克风