处理NPoco中的任意查询

时间:2014-09-02 06:08:38

标签: c# 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运行返回不同(任意)类型列的查询,然后访问并使用这些值?

2 个答案:

答案 0 :(得分:3)

你走在正确的轨道上。查询只返回一行,因此您只需从结果中获取第一个字典:

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

然后,您可以使用查询中的名称获取对象:

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

之后,您只需将对象转换为所需的数据类型即可。 (例如,使用Convert methods

答案 1 :(得分:2)

尝试使用db.FirstOfDefault<Dictionary<string, object>>(queryString)代替db.Query,然后只需从字典中获取值(键是列名)。