【问题标题】:Handling arbitrary queries in NPoco在 NPoco 中处理任意查询
【发布时间】:2014-10-26 08:00:50
【问题描述】:

我觉得我在这里遗漏了一些明显的东西,我如何通过 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 的 Query 方法需要一个类型参数,我不知道该给它什么。问题是这两个值实际上有不同的类型,一个是DateTime,另一个是int。我尝试使用以下内容:

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

但我无法弄清楚访问/使用结果的语法,而且这一切看起来都非常笨拙,我确信我一定是走错了路。

总结一下:

如何使用 NPoco 运行查询,返回不同(任意)类型的列,然后访问和使用这些值?

【问题讨论】:

    标签: c# npoco


    【解决方案1】:

    你在正确的轨道上。该查询仅返回一行,因此您可以简单地从结果中获取第一个字典:

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

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

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

    之后,您可以简单地将对象转换为您想要的数据类型。 (例如,使用Convert methods)

    【讨论】:

    • 非常感谢,这为我解决了。我知道这会很简单!
    【解决方案2】:

    尝试使用db.FirstOfDefault&lt;Dictionary&lt;string, object&gt;&gt;(queryString) 而不是db.Query,然后简单地从字典中获取值(键是列名)。

    【讨论】:

    • 如果您只期望(并且可以处理)一个,实际上 SingleOrDefault 会更好。然后他的原始代码就可以正常工作了。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多