动态查询
记录一下,方便下次使用:
/// <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;//每组中对象实例集合
}
动态分组得到的结果是动态字段+每组对象实例集合组合的新实例的集合;