2017-04-05 97 views
1

JOIN我怎樣才能表達下面的查詢(從this question):複用ServiceStack OrmLite

SELECT c.*, 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; 

使用OrmLite SelectJoin API?

回答

1

很遺憾,您輯陣表自表連接過於複雜的OrmLite的類型化的API來表達,所以你需要下降到自定義SQL,e.g:

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

results.PrintDump(); 

我創建了一個Live Example of this you can play with on Gistlyn

+0

非常感謝。是否可以通過添加其他Where子句使用API​​來結合此查詢?如果不是,那麼在可選的WHEREs和Limit(offset,rows)參數中傳遞的正確方法是什麼? – kolrie

+0

@kolrie你可以用你想要做什麼的例子來問一個新問題嗎? – mythz

+0

http://stackoverflow.com/questions/43244785/parameterizing-a-servicestack-custom-sql-query @mythz – kolrie