2014-09-02 49 views
1

我覺得我缺少明顯的東西在這裏,我怎麼可以運行通過NPoco查詢和檢索潛在的不同類型的值的任意數量的結果。處理任意查詢在NPoco

說我有一個表,如下所示:

|-------------------|------------| 
| ID | AMOUNT | DATE  | 
|-------------------|------------| 
| 1  |  2300 | 01/02/2014 | 
| 2  |  400 | 03/02/2014 | 
| 3  |  1200 | 06/02/2014 | 
| 4  |  950 | 06/02/2014 | 
|-------------------|------------| 

我想查詢有以下(MSSQL)此表:

SELECT 
MAX(DATE) AS MOST_RECENT_ORDER_DATE, SUM(AMOUNT) AS TOTAL_AMT_OF_ORDERS 
FROM 
ORDERS 

所以我我會使用類似於以下的代碼,其中db是NPoco Database對象。

var result = db.Query(<query string>); 

問題是NPoco的查詢方法需要一個類型參數,我不知道該給它什麼。問題是兩個值實際上有不同的類型,一個是DateTime,另一個是int。我嘗試使用以下:

List<Dictionary<string, object>> result; 
result = db.Query<Dictionary<string, object>>(queryString).ToList(); 

但我不能語法弄清楚訪問/使用效果,而這一切只是似乎很笨重,我敢肯定,我一定去對這個錯誤的方式。

總結:

如何使用NPoco運行一個查詢返回不同的(任意)類型的列,然後訪問和使用這些值?

回答

3

你在正確的軌道上。該查詢返回一行,所以你可以簡單地提取從結果的第一部字典:

dictionary["MOST_RECENT_ORDER_DATE"] 
dictionary["TOTAL_AMT_OF_ORDERS"] 

之後,您可以簡單地轉換:

result = db.Query<Dictionary<string, object>>(queryString) 
var dictionary = result.First(); 

然後你可以使用的對象從查詢的名稱得到將對象轉換爲您所需的數據類型。 (例如,使用Convert methods

+0

太感謝你了,這解決了這個問題對我來說。我知道這會很簡單! – 2014-09-02 06:44:10

2

嘗試使用db.FirstOfDefault<Dictionary<string, object>>(queryString)而不是db.Query,然後從字典中簡單地獲取您的值(鍵是列名稱)。