Обработка произвольных запросов в 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 ответа

Решение

Вы на правильном пути. Запрос возвращает только одну строку, поэтому вы можете просто получить первый словарь из результата:

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

Затем вы можете получить объекты, используя имена из запроса:

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

После этого вы можете просто преобразовать объекты в нужные вам типы данных. (например, используя методы Convert)

Попробуй использовать db.FirstOfDefault<Dictionary<string, object>>(queryString) вместо db.Query а затем просто получите значения из словаря (ключи - это имена столбцов).

Другие вопросы по тегам