Asp.Net Core 扩展 Linq
实现通过属性名称来排序和查询以及分页
前言 -为什么需要扩展 Linq
方法
Linq 在 .net 中使用是比较多的,而微软开发的 linq 相关函数无法满足实际项目开发中的需求,我们需要自己来扩展一些方法。
在 Asp.Net Core 开发中或者其他的后端开发中都会有一个需求(尤其对于中台或者后台管理),那就是展示数据列表;当然不是普普通通的数据列表展示,而是需要进行排序、分页、查询关键字来获取列表。
甚至在有些时候需要三个同时处理来更精确的筛选数据,而对于 Asp.Net Core 来说,用的语言是 C#,是一门强类型语言,在许多时候具有很大便利性,但是正因为这种原因,在某些时候却不太方便使用,需要进行额外方式来进行处理,才可以达到目标。
普通查询
对于 Linq 查询来说,Where
和 OrderBy
使用时需要直接点出来属于或者字段才行,如下所示:
1 | // 数据结构 |
1 | public static void Test(){ |
而所谓的一些限制,指的就是如上所示的,在进行 where
时,是通过 .
出来属性进行查询的,但是实际使用中,从前端传递过来的一般都是字符串 "Name"
,而在后端进行查询时,以目前方式是无法将属性的key
写到where
函数中,也就无法执行查询通过"Name"
来过滤数据;如果通过 if...else
来判断,那么将会是一个非常大的工程量,每个实体上面有 m 个属性,而一个项目中有 n 张表,那么几乎需要 m*n
个判断进行处理,非常的差劲,不利于后续扩展和维护。
但是天无绝人之路,在 c#中拥有扩展方法、表达式目录树和反射,可以将上面的方式进行优化。
查询条件参数公共类型
先需要定义查询条件的公共参数,用于统一规范
1 | namespace BlogSite.CommonLib.CommonEntity |
建立了查询条件基本结构,然后需要基于这个结构来进行处理
Linq 扩展方法
对于 Linq 扩展方法来说,需要使用到表达式目录树和反射等高级操作,本人目前对于此处理解不是太深,就越过这里了,直接说如何实现即可
1 | public static class LinqExtension |
实际使用中可以直接使用上方的扩展方法,扩展方法做成后,只需要按照如下调用即可
1 | public static void Test(){ |
更进一步
当然在上面我们也定义了通用的查询条件,那么我们直接也可以再进一步扩展,来达到更好的使用方式
1 | public static class LinqMethod |
这样通过 linq 就可以直接调用 UseCoditionFind
然后获取返回的 query,然后再 ToList
获取数据,返回即可。方便使用,规范查询数据