Mam tabelę bazy danych o nazwie Tagi (Id, Nazwa), z którego chciałbym wybrać te, w których nazwa pasuje do nazwy na liście. W SQL chciałbym użyć czegoś takiego:Jak używać konstruktu SQL WHERE IN z PetaPoco?
Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)
Ale teraz za pomocą PetaPoco w projekcie ASP.Net MVC3 utknąłem na zastanawianie się, jak to zrobić poprawnie. Do tej pory próbowałem:
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);
co skutkuje następującym SQL, gdzie tylko pierwszy nazwa w moim liście tagsToFind służy do dopasowywania danych tabeli, w przeciwieństwie do wszystkich z nich.
SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"
To trochę frustrujące, wiedząc, że to nie jest takie trudne ... każda pomoc jest doceniana!
Aktualizacja: I okazało się, że można to zrobić w inny sposób
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)
które dostaje mi, co chcę podczas korzystania sqlparameters. Sądzę więc, że na razie wystarczająco dobrze, choć niezbyt ładnie.
/Mike
Świetne, pomogło mi to w użyciu wielu parametrów w ogóle dzięki PetaPoco, dzięki! – Mitch99
Kiedy próbowałem tego z tablicą całkowitą, po prostu zostawiłem klauzulę jako "pole w (@ 0)" Zamiast tego, wykonałem string.Join (",", integerArray) jako parametr. Wydawało się to bardziej wydajne, ponieważ klasa PetaPoco ParametersHelper iteruje element przeliczalny. –
Holy smokes! To trochę poza myśleniem – Gaspa79