更好地设计和实现具有过滤参数,分页和排序能力的方法

时间:2017-03-11 08:10:06

标签: c#

我们有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(请使用代码))。 这种方法在编程中非常普遍。请给我关于此类方法的设计和实施的任何其他建议。

0 个答案:

没有答案