System.Linq.Dynamic动态查询

System.Linq.Dynamic动态查询

动态查询

记录一下,方便下次使用:

 /// <summary>
        /// 拼接动态查询条件
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="userName"></param>
        /// <param name="age"></param>
        /// <param name="isAdult"></param>
        /// <param name="birth"></param>
        /// <param name="id"></param>
        /// <param name="predicate"></param>
        /// <returns></returns>
        private static List<object> GetPredicate(Guid userId, string userName, int? age, bool? isAdult, DateTime? birth,Guid? id,out string predicate)
        {
            predicate = "1 = 1";
            var param = new List<object>();
            if (userId != Guid.Empty)//类型为Guid
            {
                predicate += $" and UserId.Equals(@{param.Count})";
                param.Add(userId);
            }

            if (!string.IsNullOrEmpty(userName))//string
            {
                predicate += $" and UserName.Contains(@{param.Count})";
                param.Add(userName);
            }

            if (age != null)//int
            {
                predicate += $" and Age = @{param.Count}";
                param.Add(age.Value);
            }

            if (isAdult != null)//bool
            {
                predicate += $" and IsAdult = @{param.Count}";
                param.Add(isAdult.Value);
            }

            if (birth != null)//DateTime
            {
                predicate += $" and Birth >= @{param.Count}";
                param.Add(birth.Value);
            }

            if (id != null) //类型为Guid? 可空的guid
            {
                predicate += $" and Id.Value.Equals(@{param.Count})"; 
                param.Add(id.Value);
            }
            return param;
        }

   var list =  _userInfos.Where(predicate, param.ToArray());

动态分组

               var myGrouped= _userInfos.GroupBy("IsAdult", "it").Select("new (it.Key as IsAdult,it as UserInfos)");
                var s = (from dynamic g in myGrouped
                    select g).ToList();
                foreach (var item in s)
                {
                    dynamic key = item.IsAdult; //分组的字段
                    var userInfos = item.UserInfos;//每组中对象实例集合
                }

动态分组得到的结果是动态字段+每组对象实例集合组合的新实例的集合;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值