Je travaille sur un projet qui utilise Dapper, DapperExtensions utilisant des modèles génériques et je me demande comment je peux remplir un modèle en utilisant la méthode DapperExtension.GetAll?DapperExtensions Générique <T> Remplir le modèle en utilisant des prédicats de SeparateModels
Voici le code sql qui retourne les enregistrements que j'essaie de filtrer en utilisant DapperExtensions.
select f.*
from Item f
where f.CurrentStatus = 'Open'
AND f.ItemID not in (SELECT ItemID FROM ItemLog l WHERE f.ItemID = l.ItemID
AND l.Status != 'Escalated'
AND DateLogged <= DATEADD(mi, 25, GetDate())) //<- this value would be replaced with a variable
je fait quelques recherches et trouvé que vous pouvez utiliser le Split.on mais ne sais pas si ce serait approprié dans cette situation ou non
La méthode GetAll ressemble à ce que nous avons la capacité filtrer sur les enregistrements
public virtual IEnumerable<TModel> GetAll(IList<DbFilter<TModel>> filters = null)
{
filters = filters ?? new List<DbFilter<TModel>>();
using (var db = Context)
{
var pg = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() };
foreach (var filter in filters)
{
pg.Predicates.Add(Predicates.Field(filter.FilterExpression, filter.FilterOperator, filter.FilterItem));
}
return db.GetList<TModel>(pg).ToList();
}
}
Toute aide serait grandement appréciée. J'ai amusé l'idée de créer aussi un SPROC pour peupler le modèle. Juste essayer de déterminer l'itinéraire le plus efficace.
Eh bien, j'ai réussi à peupler mon modèle en utilisant la méthode suivante, j'aimerais toujours entendre des commentaires ou des suggestions possibles.
public async Task<IEnumerable<FormsFnol>> GetLateItems(DateTime responseTime)
{
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
var items = await db.QueryAsync<FormsFnol>(@"
SELECT f.*
FROM Item f
WHERE f.CurrentStatus = 'Open'
AND f.ItemID not in (SELECT ItemID FROM ItemLog l WHERE f.ItemID = l.ItemID
AND l.Status != 'Escalated'
AND DateLogged <= @dateTime
", new { @dateTime = responseTime});
return items;
}