我们有UserAcount
个实体。我们需要此实体的Find
方法。我通常使用这种模式和实现方法:
public static List<UserAccount> Find(Dictionary<string, object> filterParams, int pageSize, int pageNumber, string sortDirection, string sortColumn, out int totalRowCount)
{
//some code here
StringBuilder whereCluse = new StringBuilder(" ");
if (filterParams.ContainsKey("LifeStateId"))
whereCluse.AppendFormat(" and f.LifeStateId = {0}", filterParams[LifeStateIdParam]);
if (filterParams.ContainsKey("LifeCityId"))
whereCluse.AppendFormat(" and f.LifeCityId = {0}", filterParams[LifeCityIdParam]);
//...
using (DatingDbContext dbContext = new DatingDbContext(DatingDbContext.ConnectionString))
{
totalRowCount = 0;
var rawResult = dbContext.Database.SqlQuery<UserAccount>("dbo.FindUserAccount", pageSize, pageNumber, sortColumn, sortDirection, whereCluse.ToString()).ToList();
//do somthing else
}
}
我的问题是这种方法是否有更好的模式和实现?例如,使用Predicate<UserAccount>
替换filterParams
字典,或使用Expression<Func<UserAccount, bool>
。如果这些技术很好,我们如何使用它们(我们如何使用Predicate或Expression参数生成动态SQL(请使用代码))。
这种方法在编程中非常普遍。请给我关于此类方法的设计和实施的任何其他建议。