Ich arbeite an einem Projekt, das Dapper, DapperExtensions mit generischen Modellen verwendet und ich frage mich, wie ich ein Modell mit der DapperExtension.GetAll-Methode füllen kann?DapperExtensions Generic <T> Füllen Modell mit Prädikaten von SeparateModels
Unten ist der SQL-Code, der die Datensätze zurückgibt, die ich mit DapperExtensions filtern möchte.
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
habe ich einige der Forschung und fand Sie die Split.on verwenden können, aber ich bin nicht sicher, ob das in dieser Situation angemessen wäre, oder nicht
Die GetAll Methode sieht wie folgt aus, so haben wir die Möglichkeit haben, um auf Aufzeichnungen zu filtern
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();
}
}
Jede Unterstützung würde sehr geschätzt werden. Ich hatte die Idee, auch ein SPROC zu erstellen, um das Modell zu bevölkern. Nur versuchen, die effizienteste Route zu bestimmen.
Nun, ich habe es geschafft, mein Modell mit der folgenden Methode zu bevölkern, würde immer noch gerne Feedback oder mögliche Vorschläge hören.
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;
}