2017-04-06 3 views
1

のパラメータ化:私はOrmLiteと次のカスタムSQLクエリを持って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で作業している場合は、単に例えば、追加のクエリを自分で構築する必要があります。

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

関連する問題