2017-04-06 71 views
1

我有以下的自定義SQL查詢與OrmLite:參數化一個ServiceStack自定義的SQL查詢

var results = db.Select<Tuple<Customer,Purchase>>(@"SELECT c.*, 0 EOT, p1.* 
    FROM customer c 
    JOIN purchase p1 ON (c.id = p1.customer_id) 
    LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
     (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id)) 
    WHERE p2.id IS NULL;"); 

什麼是添加一個可選的WHERE子句,例如過濾給定的客戶名稱字段的最佳途徑時,字段有價值或爲查詢添加分頁?

+0

http://stackoverflow.com/a/37847762/193634 –

+0

@RosdiKasim如何使WHERE子句可選? – kolrie

回答

2

如果你正在使用自定義的SQL工作,你只需要自己構建額外的查詢,e.g:

var sql = @"SELECT c.*, 0 EOT, p1.* 
    FROM customer c 
    JOIN purchase p1 ON (c.id = p1.customer_id) 
    LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
     (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id)) 
    WHERE p2.id IS NULL"; 

//string name = "Customer Name"; 
string name = null; 
if (name != null) 
{ 
    sql += "\nAND name = @name"; 
} 

int? limit = 100; 
if (limit != null) 
{ 
    sql += $"\nLIMIT {limit}"; 
} 

var results = db.Select<Tuple<Customer,Purchase>>(sql, new { name }); 

一個Live Example of this is available on Gistlyn