C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式

在asp.net core、asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选、过滤、LInq配合Ef.core进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询,加上Any和Contains进行进一步处理

在linq中各种条件表达式可能写的巨长而且过几天自己都看不懂了,这个可以可以使操作变得简单易懂并用在各种地方,我举例一部分

public async Task<IActionResult> List(Model filter)
{
	var express = PredicateBuilder.New<Result>() //这里Result是我们定义的实体类,必须与下面where条件的类型一致

	//简化为 where(id==filter.id)直接等于相当于精准查询
	.And(x => filter.Id == 0 || x.Id == filter.Id)

	//简化为where(id==filter.id and name==filter.name)输出的时候为where(id=1 and name='大帅逼')
	//contains是模糊查询 简化为 name link %大帅逼%
	.And(x => string.IsNullOrEmpty(filter.Name) || x.Name.Contains(filter.Name))

	//类似上述,深入查询也是可以模糊查找的, Any有点难度可以理解为foreach循环 foreach(var t Data){t.user}
	.And(x => x.Data.Any(t => t.User.Any(s => s.Content.Contains(filter.Content))))

	//当然字符串也可以精准查找数据
	.And(x => x.Title==filter.Title)

	//跨表查询或者说深入查询也可以精准查找
	.And(x => x.Data.Any(t => t.Title=filter.Title));

	//使用起来就是加载条件里面就可以了
	List<Result> ModelList=new List<Result>();
	ModelList.where(express);

	当我们使用EF的时候也是可以用的,其他方法也是可以用的
	var result=Query.where(express);
}
//当我们使用 efcore,ling查询数据库的时候也可以用  这是缩写
public virtual IQueryable<Result> Query<T>(Expression<Func<Result, bool>> predicate)
{
	return DbContext.Set<Result>().Where(predicate);
}
—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花