我有一个名为Tags(Id,Name)的数据库表,我想从中选择名称与列表中的名称匹配的表.在SQL中我会使用类似的东西:
Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)
Run Code Online (Sandbox Code Playgroud)
但是现在在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);
Run Code Online (Sandbox Code Playgroud)
这导致以下SQL,其中只使用tagsToFind列表中的第一个名称来匹配表数据而不是所有表名数据.
SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"
Run Code Online (Sandbox Code Playgroud)
这有点令人沮丧,知道这可能不是那么难......任何帮助都表示赞赏!
更新: 我发现它可以用另一种方式完成
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);
} …Run Code Online (Sandbox Code Playgroud)