Sök…


Syntax

  • public static IEnumerable <T> Query <T> (denna IDbConnection cnn, sträng sql, objekt param = null, SqlTransaction transaktion = null, bool buffrad = true)
  • public static IEnumerable <dynamic> Query (denna IDbConnection cnn, sträng sql, objekt param = null, SqlTransaction transaktion = null, bool buffrad = true)

parametrar

Parameter detaljer
cnn Din databasanslutning, som redan måste vara öppen.
sQL Kommando att utföra.
param Objekt att extrahera parametrar från.
transaktion Transaktion som denna fråga är en del av, om någon.
buffrad Huruvida buffertläsning av resultaten från frågan ska göras eller inte. Detta är en valfri parameter med standardinställningen sant. När buffrat är sant buffras resultaten till en List<T> och returneras sedan som ett IEnumerable<T> som är säkert för flera uppräkning. När buffrat är felaktigt hålls sql-anslutningen öppen tills du är klar med läsningen så att du kan behandla en enda rad samtidigt i minnet. Flera uppräkningar kommer att leda till ytterligare anslutningar till databasen. Även om buffrad falsk är mycket effektiv för att minska minnesanvändningen om du bara behåller mycket små fragment av de poster som återlämnats har den en betydande prestanda jämfört med ivrigt materialisering av resultatuppsättningen. Slutligen, om du har många samtidiga obuffrade sql-anslutningar, måste du överväga anslutning till poolen svält vilket orsakar förfrågningar om att blockera tills anslutningarna blir tillgängliga.

Fråga efter en statisk typ

För typer kända vid kompileringstid använder du en generisk parameter med 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);

Fråga efter dynamiska typer

Du kan också fråga dynamiskt om du tar bort den generiska typen.

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

Fråga med dynamiska parametrar

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow