[C#] Linq 动态条件查询

应用背景:以货品为例,在基础数据中配置货品的判断规则,要根据这个规则筛选出符合条件的集合。

创建货品类

    public class Product
    {
        public string Name { get; set; }
        public string Code { get; set; }
        public string Unit { get; set; }
    }

主要实现方法

        public void GetProducts()
        {
            #region 创建List 实际应用从数据库中取值
            var products = new[] {
                new {Name = "货品1", Code = "001", Unit = "个"},
                new {Name = "货品2", Code = "002", Unit = "件"},
                new {Name = "货品3", Code = "003", Unit = "瓶"},
                new {Name = "货品4", Code = "004", Unit = "个"},
                new {Name = "货品1", Code = "005", Unit = "台"},
            };
            List<Product> lsProducts = new List<Product>();
            foreach (var q in products)
            {
                Product product = new Product();
                product.Name = q.Name;
                product.Code = q.Code;
                product.Unit = q.Unit;
                lsProducts.Add(product);
            }
            #endregion
            //获取到的判断规则 判断规则为Code和Unit 其中Name为固定条件
            string condition = "Code,Unit";
            string[] arrayCondition = condition.Split(‘,‘);
            //查询结果
            List<Product> result = lsProducts.Where(a => Filter(a, arrayCondition, "货品1", "005", "")).ToList(); //0条
            //只需判断Code 其中Name为固定条件
            string condition2 = "Code";
            arrayCondition = condition2.Split(‘,‘);
            result = lsProducts.Where(a => Filter(a, arrayCondition, "货品1", "005", "")).ToList();//1条
            //没有判断规则 其中Name为固定条件
            string condition3 = "";
            arrayCondition = condition3.Split(‘,‘);
            result = lsProducts.Where(a => Filter(a, arrayCondition, "货品1", "005", "")).ToList();//2条
        }

        public bool Filter(Product product, string[] arrayCondition, string name, string code, string unti)
        {
            bool result = false;
            result = (product.Name == name)
                && (!arrayCondition.Contains("Code") ? true : product.Code == code)
                && (!arrayCondition.Contains("Unit") ? true : product.Unit == unti);
            return result;
        }

  

  

  

时间: 2024-08-12 16:58:32

[C#] Linq 动态条件查询的相关文章

生成jFinal的动态条件查询语句的工具类

因为有时候需要根据前台的多个条件来过滤数据!因此需要根据是否有值以及当前值是以什么方式来过滤.这样我们不可能一个一个值来判断吧!这样代码就有些难看了!而jFinal也没有提供这样的方法,而网上的一些解决方法感觉不太好用麻烦而且不够灵活!基于这个考虑我就自己写了一个工具类!目前来说用着还挺方便的!如果有什么不对或者改进的地方请指正,大家共同进步! /**  * 用于生成JFinal的SQL查询语句<br>  * 类名称:Conditions<br>  * 创建人:yangxp<

【Oracle】曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询

一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables-------------------------------------------------------- 查询s_emp表中最大的工资数,并且显示出这个最大工资数的员工名字 select last_name,max(salary)from s_emp; 多表查询 查询多张表的时候会产生笛卡尔积 为了防止笛卡尔积的产生,我们需要使用某些条件把两张表或多张

Linq动态条件

很多情况下,我们开发程序,需要动态拼接SQL查询语句; 比如  select top 1 * from User where age= 18  and  name = 'renruiquan' 其中红色的代码,是我们需要根据查询条件是否为空,来判,要不要加在查询的SQL里; 换成Linq里就不能这么直接的去拼接了,好在国外的大神有给我们解决方案.下面直接上代码: (新手同学不需要关心代码具体是怎么实现的,只需要知道怎么调用就好.当然,你能研究一下,给自己充电,也是再好不过了) using Sys

spring-data-jpa动态条件查询

//获取动态条件的集合List<Long> list = new ArrayList<Long>(); Long sysUserId = currentUser.getSysUserId(); if (sysUserId != null) { SysUser sysUser = sysUserRepository.findOne(sysUserId); if (sysUser != null) { String groupItemIds = sysUser.groupItemIds

linq 多条件查询

Linq 进行多条件查询的时候使用PredicateBuilder帮助类可以很好的解决. 类的源码: public static class PredicateBuilder { /// <summary> /// 应用True时:单个AND有效,多个AND有效:单个OR无效,多个OR无效:混合使用时写在AND后的OR有效 /// </summary> /// <typeparam name="T"></typeparam> /// &l

用PredicateBuilder实现Linq动态拼接查询

在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询).我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们的目的的.但这样又会破坏程序的一至性,本来使用Entiry Framwork的目标就是用面向对象的方式操纵数据库,这样我们又要开始写SQL语句了. 其实我一开始也是这样做的直到有一天我们部门的美女程序员给我介绍LinqKit,我才开始用PredicateBuilder来拼接Predicate委托. P

linq多条件查询

这是一个方法,返回IList<AtAGlanceDetail> public IList<AtAGlanceDetail> GetAtAGlanceReportByCondition(int? supplierId, string container, DateTime? ETA, string FOBPoint, string HBLNum, DateTime? motherVesselETD, string voyage) { var data = GetAll().Where

linq 多条件查询 where 拼接+分页

首先定义一个静态类 1 public static class QueryAssembly 2 { 3 /// <summary> 4 /// 返回true 5 /// </summary> 6 /// <typeparam name="T"></typeparam> 7 /// <returns></returns> 8 public static Expression<Func<T, bool>

java动态条件查询sql语句

select*fromtablewhere1=1<if test="tUserId!=null and tUserId!=''">and t_user_id=#{tUserId}</if><if test="toolCode!=null and toolCode!=''">and .tool_code=#{toolCode}</if><if test="workCode!=null and workCo