Я чувствую, что мне не хватает чего-то очевидного здесь, как я могу запустить запрос через 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 для запуска запроса, возвращающего столбцы разных (произвольных) типов, а затем доступа и использования этих значений?
Ты на правильном пути. Запрос возвращает только одну строку, поэтому вы можете просто извлечь первый словарь из результата:
result = db.Query<Dictionary<string, object>>(queryString)
var dictionary = result.First();
Затем вы можете получить объекты, используя имена из запроса:
dictionary["MOST_RECENT_ORDER_DATE"]
dictionary["TOTAL_AMT_OF_ORDERS"]
После этого вы можете просто преобразовать объекты в нужные типы данных. (например, с использованием методов преобразования)
Попытайтесь использовать db.FirstOfDefault<Dictionary<string, object>>(queryString)
вместо db.Query
а затем просто получите свои значения из словаря (ключи - это имена столбцов).