Обработка произвольных запросов в 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
а затем просто получите значения из словаря (ключи - это имена столбцов).