2014-09-02 45 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,然后从字典中简单地获取您的值(键是列名称)。