Provare a ridurre la ripetizione nel mio codice facendo un metodo GET generico. Sto usando OrmLite e il suo aggiornamento SQLExpressionVisitor ... L'obiettivo è passare un lambda. Ho visto alcuni altri post che speravo sarebbe stato d'aiuto ma finora, non andare ... È chiaro che il problema è come sto cercando di ottenere i criteri valutati nella dichiarazione ev.Where, ma la soluzione mi sta sfuggendo. ..Metodo query generico
Grazie in anticipo ... -Lenny
public IQueryable<T> Get<T>(Predicate<T> criteria)
{
using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
{
SqlExpressionVisitor<T> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<T>();
ev.Where(x => criteria.Invoke(x))
return db.Select(ev).AsQueryable();
}
}
Questo è l'errore che ottengo ... variabile 'x' di tipo 'TW.Api.Models.CostCenter' riferimento dal campo di applicazione '', ma non è definito
Ecco un esempio di codice che funziona ma non è generico ....
public IQueryable<CostCenter> Get(Identity user)
{
using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
{
SqlExpressionVisitor<CostCenter> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<CostCenter>();
ev.Where(x => x.OrgId == user.OrgId);
ev.Where(x => x.VisibilityStockpointId == user.StockpointId);``
return db.Select(ev).AsQueryable();
}
}
Questo è il modello ho fatto riferimento in precedenza ...
[Alias("CostCenterDetail")]
public class CostCenter
{
public Guid Id { get; set; }
public Guid StockpointId { get; set; }
public virtual Guid? VisibilityStockpointId { get; set; }
public string Description { get; set; }
public string Number { get; set; }
public string OrgId { get; set; }
}
per tutti la lettura di questo, ecco il codice finale ...
public IQueryable<T> Get<T>(Expression<Func<T, bool>> criteria)
{
using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
{
return db.Select(criteria).AsQueryable();
}
}
Non tiratevi avete bisogno di un 'Expression> criteria' invece di un' Predicate Criteria' nel vostro metodo generico? –
Jehof
Grazie Jehof, questo mi ha messo sulla strada giusta ... – Lenny