Was ist der beste Weg, um eine Abfrage mit IN-Klausel mit Dapper ORM zu schreiben, wenn die Liste der Werte für die IN-Klausel aus Geschäftslogik kommt? Nehmen wir zum Beispiel an, ich habe eine Frage:
SELECT *
FROM SomeTable
WHERE id IN (commaSeparatedListOfIDs)
Die commaSeparatedListOfIDs
wird aus der Geschäftslogik übergeben und kann eine beliebige Art von IEnumerable(of Integer)
. Wie würde ich in diesem Fall eine Abfrage erstellen? Muss ich tun, was ich bisher gemacht habe, was im Grunde String-Verkettung ist oder gibt es eine Art von fortgeschrittener Parameter-Mapping-Technik, die mir nicht bekannt ist?
Dapper unterstützt dies direkt. Beispielsweise...
string sql = "SELECT * FROM SomeTable WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 }});
Direkt von der GitHub Projekt Homepage :
Dapper ermöglicht es Ihnen, IEnumerable zu übergeben und Ihre Abfrage automatisch zu parametrisieren.
connection.Query<int>(
@"select *
from (select 1 as Id union all select 2 union all select 3) as X
where Id in @Ids",
new { Ids = new int[] { 1, 2, 3 });
Wird übersetzt zu:
select *
from (select 1 as Id union all select 2 union all select 3) as X
where Id in (@Ids1, @Ids2, @Ids3)
// @Ids1 = 1 , @Ids2 = 2 , @Ids2 = 3