Dapper.NET에서 동적으로 검색 할 값을 추가하는 방법

c# dapper micro-orm

문제

Dapper.NET 사용하여 구매 주문 검색 기능을 Dapper.NET 입니다. 사용자는 인보이스 번호 및 구매 날짜로 검색 할 수 있습니다.

사용자가 텍스트 상자에 인보이스 번호를 기입하면 인보이스 번호로 검색하고,
사용자가 송장 번호 및 구매 날짜를 기입하면 송장 번호 및 구매 날짜로 검색하고,
사용자가 구매 날짜를 기입하면 구매 날짜별로 검색합니다.

그래서, 쿼리 :

string query = "SELECT PurchaseDate, InvoiceNo, Supplier, Total FROM PurchaseOrder WHERE 1 = 1";

if (!string.IsNullOrEmpty(purchaseOrder.InvoiceNo))
{
    query += " AND InvoiceNo = @InvoiceNo";
}
if (purchaseOrder.PurchaseDate != DateTime.MinValue)
{
    query += " AND PurchaseDate = @PurchaseDate";
}

return this._db.Query<PurchaseOrder>(sql, ?).ToList();

문제는 쿼리의 기준 수를 기준으로 값을 동적으로 전달하는 방법을 모르겠다는 것입니다.

수락 된 답변

https://github.com/StackExchange/dapper-dot-net 에서 샘플을 가져옵니다.

 string query = "SELECT PurchaseDate, InvoiceNo, Supplier, Total FROM PurchaseOrder     WHERE 1 = 1";

 if (!string.IsNullOrEmpty(purchaseOrder.InvoiceNo))
 {
     sql += " AND InvoiceNo = @InvoiceNo";
 }
 if (purchaseOrder.PurchaseDate != DateTime.MinValue)
 {
    sql += " AND PurchaseDate = @PurchaseDate";
 }


  return this._db.Query<PurchaseOrder>(sql, new {InvoiceNo = new DbString { Value =     YourInvoiceNoVariable, IsFixedLength = true, Length = 10, IsAnsi = true });

구매 날짜의 경우 하나의 sql 문에 두 매개 변수를 모두 포함할지 또는 각각에 대해 _db.Query를 별도로 호출 할지를 결정해야합니다


전문가 답변

간단한 옵션 : 모든 것을 포함하십시오! 단정 한 쿼리를 검사하고 분명히 필요하지 않은 결정, 그들을 제거합니다 - 만 쿼리에서 언급 찾을 수있는 매개 변수를 전송. 따라서 어떤 쿼리가 @foo 필요로한다면, 어떤 쿼리는 @bar 필요로하고, 어떤 쿼리는 모두 필요하고 어떤 것이 필요하지 않습니다.

int foo = ...
string bar = ...
...Query<ResultType>(sql, new { foo, bar })...

또는 수동으로 수행하려면 DynamicParameters 확인하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.