Поиск…


Синтаксис

  • public static IEnumerable <T> Query <T> (это IDbConnection cnn, строка sql, object param = null, транзакция SqlTransaction = null, bool buffered = true)
  • public static IEnumerable <dynamic> Query (это IDbConnection cnn, строка sql, object param = null, транзакция SqlTransaction = null, bool buffered = true)

параметры

параметр подробности
спп Соединение с базой данных, которое должно быть открыто.
SQL Команда для выполнения.
пары Объект для извлечения параметров из.
сделка Транзакция, в которой этот запрос является частью, если таковой имеется.
буферном Будь или нет буферизация чтения результатов запроса. Это необязательный параметр с по умолчанию значением true. Когда буферизировано верно, результаты буферизуются в List<T> а затем возвращаются как IEnumerable<T> который безопасен для множественного перечисления. Если буферизация ложна, соединение sql будет открыто до тех пор, пока вы не закончите чтение, что позволит вам обрабатывать одну строку во времени в памяти. Множественные перечисления вызовут дополнительные подключения к базе данных. Хотя буферизованное ложное значение очень эффективно для сокращения использования памяти, если вы поддерживаете только очень мелкие фрагменты возвращенных записей, он имеет значительные накладные расходы по сравнению с желательным материализацией набора результатов. Наконец, если у вас есть многочисленные параллельные небуферизованные соединения sql, вам нужно рассмотреть головоломку пула соединений, вызывающую блокировку запросов до тех пор, пока соединения не станут доступными.

Запрос для статического типа

Для типов, известных во время компиляции, используйте общий параметр с Query<T> .

public class Dog
{
    public int? Age { get; set; }
    public Guid Id { get; set; }
    public string Name { get; set; }
    public float? Weight { get; set; }

    public int IgnoredProperty { get { return 1; } }
}    

//
IDBConnection db = /* ... */;

var @params = new { age = 3 };
var sql = "SELECT * FROM dbo.Dogs WHERE Age = @age";

IEnumerable<Dog> dogs = db.Query<Dog>(sql, @params);

Запрос для динамических типов

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

IDBConnection db = /* ... */;
IEnumerable<dynamic> result = db.Query("SELECT 1 as A, 2 as B");

var first = result.First();
int a = (int)first.A; // 1
int b = (int)first.B; // 2

Запрос с динамическими параметрами

var color = "Black";
var age = 4;

var query = "Select * from Cats where Color = :Color and Age > :Age";
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("Color", color);
dynamicParameters.Add("Age", age);

using (var connection = new SqlConnection(/* Your Connection String Here */))
{
    IEnumerable<dynamic> results = connection.Query(query, dynamicParameters);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow