Sélection personnalisée des éléments dans la requête en utilisant Dapper dapper

Question

Je suis nouveau dans Dapper. Je veux sélectionner les éléments dynamiques de conn.Query <> () qui exécutent une procédure stockée dans SQL.

Mon code est similaire à:

            connection.Open();
            var parameters = new DynamicParameters();
            parameters.Add("@name", x.GetValue<string>("Name"));
            parameters.Add("@lastname", x.GetValue<string>("LastName"));
            var query = connection.Query<Costumer>(sql: "GetCostumer", param: parameters, commandType: CommandType.StoredProcedure);

et ma procédure stockée est similaire à:

select * from Costumer where name = @Name and lastname = @lastname

Dans le cadre des entités, je peux résoudre mon problème par ce code:

IQueryable<User> query = container.GetQuery<Users>();
var finalResult = (from item in query
              select new {
                  item.name,
                  item.lastname
              }).ToList();

Réponse acceptée

Si la question concerne la sélection des deux colonnes, au niveau le plus simple, vous pouvez faire exactement ce que vous faites déjà, à savoir:

var finalResult = (from item in query
                  select new {
                      item.Name,
                      item.LastName
                  }).ToList();

Notez que cela ne récupère toutes les colonnes au client, puis re-cartes là. Si vous voulez faire le filtrage de colonne sur le serveur, vous devrez utiliser quelque chose comme INSERT EXEC avec un SELECT ultérieur, c.-à-d.

DECLARE @table_var TABLE (cols)
INSERT INTO @table_var (cols) EXEC proc {args}
SELECT foo, bar FROM @table_var

Bien qu'une implémentation plus propre puisse être d'exposer un UDF, vous pouvez simplement utiliser:

SELECT foo, bar FROM dbo.SomeFunction(args);

En passant, si le type <Costumer> n'existe pas déjà, il existe un moyen d'éviter le type intermédiaire via dynamic et la méthode de Query non générique, mais il est en fait légèrement moins efficace que ci-dessus. avec parcimonie.

Notez également que vous n'avez pas besoin de DynamicParameters dans ce cas; vous pouvez simplement utiliser:

var parameters = new {
    name = x.GetValue<string>("Name"),
    lastname = x.GetValue<string>("LastName")
};
var query = connection.Query<Costumer>("GetCostumer", parameters,
    commandType: CommandType.StoredProcedure);


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi