使用Dapper ORM SELECT * FROM X WHERE id IN(...)

.net dapper sql

當IN子句的值列表來自業務邏輯時,使用Dapper ORM使用IN子句編寫查詢的最佳方法是什麼?例如,假設我有一個查詢:

SELECT * 
  FROM SomeTable 
 WHERE id IN (commaSeparatedListOfIDs)

commaSeparatedListOfIDs正在從業務邏輯傳入,它可以是任何類型的IEnumerable(of Integer) 。在這種情況下,我將如何構造查詢?我是否必須做到目前為止我一直在做的事情,這基本上是字符串連接,還是有一些我不知道的高級參數映射技術?

一般承認的答案

Dapper直接支持這一點。例如...

string sql = "SELECT * FROM SomeTable WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 }});

熱門答案

直接來自GitHub項目主頁

Dapper允許您傳入IEnumerable並自動參數化您的查詢。

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 });

將被翻譯為:

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


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因