先修客

MVC+EF 多条件查询

根据以前的做法是拼接sql语句,这会增加维护成本,因为sql语句里的内容不会报错,所以在使用ef的时候必须要抛弃拼接sql语句的习惯。

构建实例

 List<vyw_user> list = null;
 IQueryable<vyw_user> result = Ctx.vyw_user;//Ctx表示EF上下文

构建搜索条件

if (!string.IsNullOrEmpty(mobile) || !string.IsNullOrEmpty(usertype) || !string.IsNullOrEmpty(logintimestart) || !string.IsNullOrEmpty(logintimeend)) //搜索情况 假设有四个条件
            {
                #region 搜索情况
                if (mobile.Trim().Length > 0)//手机号码
                {
                    result = result.Where(c => c.mobile.Contains(mobile));
                }
                int usertypeid = Convert.ToInt32(usertype);
                if (usertypeid != -1)//用户类型
                {
                    result = result.Where(c => c.userType == usertypeid);
                }
                if (logintimestart.Trim().Length > 0 && logintimeend.Trim().Length > 0)//搜索查询时间
                {
                    DateTime bstart = Convert.ToDateTime(logintimestart);
                    DateTime bend = Convert.ToDateTime(logintimeend);
                    result = result.Where(c => c.loginTime >= bstart && c.loginTime <= bend);
                }
                #endregion
            }

执行数据查询

 count = result.Where(c => true).Count();//数据的统计
 list = result.Where(c => true).ToList();//数据查询

参数过滤

很多情况下查询到的结果并不能满足我们的需要,还需要进行一些处理,这里需要用linq

var list1 = from d in list
select new
{
userID = d.userID,
mobile = d.mobile,
userType = Enum.GetName(typeof(Enum_userType), d.userType),
fund = d.fund,
certifyName = d.certifyName,
certifyNo = d.certifyNo,
isCertify = Enum.GetName(typeof(Enum_cetifyType), d.isCertify),
certifyTime = d.certifyTime == null ? "" : Convert.ToDateTime(d.certifyTime).ToString("yyyy-MM-dd HH:mm:ss"),
signTime = Convert.ToDateTime(d.signTime).ToString("yyyy-MM-dd HH:mm:ss"),
loginTime = d.loginTime == null ? "" : Convert.ToDateTime(d.loginTime).ToString("yyyy-MM-dd HH:mm:ss")
};

posted on 2017-01-21 12:12  先修客  阅读(3463)  评论(1编辑  收藏  举报

导航