2016-03-21 1 views
2

Я хочу реализовать некоторые функции, как это:Как получить значение первого ребенка с помощью щеголеватый (обычно-опрос COUNT (*) в качестве единственного результата)

public static string GetResult(string sql) { 
    // TODO: 
    // result = connection.Query(....); 
    // return result.FirstRow().FirstChild().ToString(); 
} 

И называют так:

string myName = GetResult("SELECT userName from tb_Users WHERE ID = 1"); 
// or 
int totalRows = Convert.ToInt32(GetResult("SELECT count(*) FROM tb_List")); 

Как я могу реализовать раздел TODO с помощью Dapper?

+0

Это зависит полностью от того, что вы говорите «Dapper» тип объекта. 'First()' даст вам первую строку. Если вы укажете 'Dapper' тип объекта' string', вы сможете просто вернуть 'Query (sql) .First();'. Кроме того, при запуске 'ToString()' результата и затем разбора его обратно в типизированное значение запрашивает проблемы. – Rob

+0

@ Rob мне очень помогает! – ineztia

ответ

2

Dapper имеет ExecuteScalar[<T>], который может использоваться, если вы читаете одну колонку, одну строку, одну сетку. Итак:

var name = connection.ExecuteScalar<string>("select 'abc'"); 
int count = connection.ExecuteScalar<int>("select 123"); 

Существует также Query{First|Single}[OrDefault][<T>] для всех обычных «рода одной строки, несколько столбцов» сценариев.

Предупреждение о вашем API: все, что только принимает строку sql (и без каких-либо отдельных параметров), вызывает у меня очень нервную реакцию, что вы собираетесь вызвать проблемы с инъекцией sql.

+0

благодарю вас за предостережение, мои приведенные выше коды являются просто образцом, чтобы вы могли легко читать: P – ineztia