List<>多个条件的查询

Imcx 2016-07-13 05:38:16
在web程序里的一个筛选功能

源数据是一个List<>,有4个筛选条件

例如
List<Student> students = new List<Student>();

条件有:学号、性别、年龄、班级

提供四个下拉框选择,默认值为空

因为四个条件不一定需要全选,我需要要条件为空时筛选出所有符合要求的项
比如只选择班级1和年龄20,就得出在1班里年龄为20的所有学生

目前我自己写的是先判断回传来的四个条件有没有空值,然后去对应的筛选,这样要写好多
...全文
1439 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-07-17
  • 打赏
  • 举报
回复
引用 3 楼 q107770540 的回复:
 QueryContext query = new QueryContext();
            var q = from u in query.Users
                     select u;
            if (!string.IsNullOrEmpty(a))
            {
                q = q.Where(p => p.name == a);
            }
            if (!string.IsNullOrEmpty(b))
            {
                q = q.Where(p => p.age == b);
            }
            if (!string.IsNullOrEmpty(c))
            {
                q = q.Where(p => p.sex == c);
            }
            if (!string.IsNullOrEmpty(d))
            {
                q = q.Where(p => p.address == d);
            }
            q.ToList();  //上边的所有if,只有到此处才会执行
        }
这就是正解,在tolist以前就是表达式树,而没有查询 第一行 var q = query.Users; 可以直接写
Imcx 2016-07-16
  • 打赏
  • 举报
回复
而且我真是个乌鸦嘴,刚说可能会加筛选条件还真加了 如果按照常规写法,每加一个条件都要在原来的排列基数上加1,越到后面越爆炸啊。。。
Imcx 2016-07-16
  • 打赏
  • 举报
回复
引用 2 楼 winner2050 的回复:
表达式树拼接条件。 http://www.cnblogs.com/Lau7/p/5451985.html 可麻烦了,公司有自己的框架解决这种问题就好弄过了,我以前为了解决这个问题花了不少时间。
引用 3 楼 q107770540 的回复:
 QueryContext query = new QueryContext();
            var q = from u in query.Users
                     select u;
            if (!string.IsNullOrEmpty(a))
            {
                q = q.Where(p => p.name == a);
            }
            if (!string.IsNullOrEmpty(b))
            {
                q = q.Where(p => p.age == b);
            }
            if (!string.IsNullOrEmpty(c))
            {
                q = q.Where(p => p.sex == c);
            }
            if (!string.IsNullOrEmpty(d))
            {
                q = q.Where(p => p.address == d);
            }
            q.ToList();  //上边的所有if,只有到此处才会执行
        }
两位方法我都看过了,想试试QueryContext 发现构造要函数,还挺复杂的,希望@兔子党-督察 能解惑一波 不是否定表达式树,前天在网上看了不少资料,但是我能力不够还不能理解那个
q107770540 2016-07-16
  • 打赏
  • 举报
回复
 QueryContext query = new QueryContext();
            var q = from u in query.Users
                     select u;
            if (!string.IsNullOrEmpty(a))
            {
                q = q.Where(p => p.name == a);
            }
            if (!string.IsNullOrEmpty(b))
            {
                q = q.Where(p => p.age == b);
            }
            if (!string.IsNullOrEmpty(c))
            {
                q = q.Where(p => p.sex == c);
            }
            if (!string.IsNullOrEmpty(d))
            {
                q = q.Where(p => p.address == d);
            }
            q.ToList();  //上边的所有if,只有到此处才会执行
        }
  • 打赏
  • 举报
回复
程序在开发时,3天之内扩展20次具体的(查询条件),都是正常的。我相信你不过才遇到3、4次就爆炸了。 #3 楼的方式就是 linq 的正规方式。你的 linq provider 在编译时回去处理、合并那些条件。你看看你的 linq provider 实际产生、数据库实际执行的 sql 语句就知道了。 如果你的 linq provider 不能很好地产生紧凑的 sql 查询语句,你也没有必要使用“表达式树”。直接回到 ADO.NET 即可。
winner2050 2016-07-13
  • 打赏
  • 举报
回复
表达式树拼接条件。 http://www.cnblogs.com/Lau7/p/5451985.html 可麻烦了,公司有自己的框架解决这种问题就好弄过了,我以前为了解决这个问题花了不少时间。
Imcx 2016-07-13
  • 打赏
  • 举报
回复
万一后面要加一个筛选条件那么又得重写一下筛选的代码 求大神告知一下较为简便的方法

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧