Tengo una tabla de base de datos llamada Etiquetas (Id, Nombre) desde la que me gustaría seleccionar aquellas en las que el nombre coincide con un nombre en una lista. En SQL que usaría algo como:¿Cómo uso el constructo SQL WHERE IN con PetaPoco?
Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)
Pero ahora usando PetaPoco en un proyecto de ASP.Net MVC3 estoy atascado encontrar la manera de hacerlo correctamente. Hasta ahora he intentado:
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);
que se traduce en el siguiente SQL, donde sólo el primer nombre en mi lista de tagsToFind se utiliza para que coincida con los datos de la tabla en lugar de todos ellos.
SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"
Es un poco frustrante, sabiendo que esto probablemente no sea tan difícil ... ¡se agradece cualquier ayuda!
Actualización: descubrí que se puede hacer de otra manera
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)
la que consigo lo que quiero durante el uso de SqlParameters. Así que supongo que es lo suficientemente bueno por ahora, aunque no es súper bonito.
/Mike
Genial, eso me ayudó a utilizar múltiples parámetros en general con PetaPoco, ¡gracias! – Mitch99
Cuando lo intenté con una matriz de enteros, simplemente dejó la cláusula como "campo en (@ 0)" En su lugar, realicé una cadena.Enlazar (",", integerArray) como el parámetro. Esto parecía más eficiente de todos modos, ya que la clase PetaPoco ParametersHelper itera el elemento enumerable. –
Holy Smokes! Eso es un pensamiento externo – Gaspa79