日期:2014-05-18  浏览次数:20416 次

关于做高级查询的问题
我在做项目的时候,遇到了这样的问题,就是有六个可以供输入查询条件的文本框,这六个文本框只要输入的条件多于一个,就可以查询,现在问题时,我不知道用户输入了哪几个条件,这样该怎么查询数据库?我想用linq做,该怎么办?

------解决方案--------------------
我在想先用一个条件进行查询,然后对查询的结果用第二个条件再次进行查询,依次这样?
并不感觉这样效率会很高。
------解决方案--------------------
C# code

             StringBuilder sb = new StringBuilder();
             if (!string.IsNullOrEmpty(tid))
            {
                sb.Append(" and typeid=" + tid);
            }
            if (!string.IsNullOrEmpty(cname))
            {
                sb.Append(" and title like '%" + cname + "%'");
                           }
            Int64 total = 0;
            string TableName = " yjfw_info ";
            string ReFieldsStr = " id,InfoID,title,ifoLaiyuan,fabutime,shzt,typeid,tjzt,bzInt";
            string OrderString = "  bzInt desc,ID desc ";
            string StrWhere = " 1=1" + sb.ToString();
            DataTable dt = pub.FindPageList(out total, PageIndex, 10, StrWhere, TableName, ReFieldsStr, OrderString, "ID");
            RepList.DataSource = dt.DefaultView;
            RepList.DataBind();

------解决方案--------------------
贴点代码,楼主参考
------解决方案--------------------
C# code

        public IQueryable<Class> Query(Class model)
        {
            var query = db.Class.AsQueryable();
            if (model != null)
            {
                if (!string.IsNullOrEmpty(model.LinkText))
                {
                    query = query.Where(a=>a.LinkText.Contains(model.LinkText));
                }
                if (0 != model.LocationID)
                {
                    query = query.Where(a=>a.LocationID == model.LocationID);
                }
                if (null != model.StartDate)
                {
                    query = query.Where(a=>a.StartDate >= model.StartDate);
                }
                if (null != model.EndDate)
                {
                    query = query.Where(a=>a.EndDate <= model.EndDate);
                }
               
                query = query.Where(a => a.IsDelete == 0);
            }
            return query;
        }