【发布时间】:2011-10-20 03:10:15
【问题描述】:
我有一个名为 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 时得到了我想要的东西。所以我想它现在已经足够好了,虽然不是超级漂亮。
/迈克
【问题讨论】: