Обработка произвольных запросов в NPoco

1

Я чувствую, что мне не хватает чего-то очевидного здесь, как я могу запустить запрос через 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 - объект Database NPoco.

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

Проблема заключается в том, что метод NPoco Query требует параметра типа, и я не уверен, что ему его дать. Проблема состоит в том, что два значения имеют разные типы, один будет DateTime а другой будет int. Я попытался использовать следующее:

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

Но я не могу понять синтаксис для доступа/использования результатов, и все это кажется очень неуклюжим, и я уверен, что, должно быть, я ошибся.

Обобщить:

Как я могу использовать NPoco для запуска запроса, возвращающего столбцы разных (произвольных) типов, а затем доступа и использования этих значений?

Теги:
npoco

2 ответа

3
Лучший ответ

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

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

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

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

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

  • 0
    Большое спасибо, это решило это для меня. Я знал, что это будет что-то простое!
2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню