- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
//常规查询 var query = users .WhereIf(m => m.UserName.Contains(input.UserName), !string.IsNullOrEmpty(input.UserName)) .WhereIf(m => input.RoleIds.Contains(m.RoleId), input.RoleIds?.Any() ?? false) .WhereIf(m => m.Role.RoleName.Contains(input.RoleName), !string.IsNullOrEmpty(input.RoleName)) .WhereIf(m => m.Sys.Any(p => p.SysName.Contains(input.SysName)), !string.IsNullOrEmpty(input.SysName)) .WhereIf(m => m.Gender == input.Gender, input.Gender.HasValue) .WhereIf(m => m.CreateTime >= input.CreateTimeStart, input.CreateTimeStart.HasValue) .WhereIf(m => m.CreateTime <= input.CreateTimeEnd, input.CreateTimeEnd.HasValue); var list = query .OrderBy(m => m.RoleId).ThenBy(m => m.Tel) .Skip((input.Page - 1) * input.PageSize).Take(input.PageSize) .ToList(); var total = query.Count(); } { //构造器查询方式1 var (list, total) = users.ToPageList(input.AddMultipleOrderBy(false, nameof(User.RoleId), nameof(User.Tel))); //构造器查询方式2 var (list2, total2) = users .WhereExt(input) //.Where(input.ToExpression<User>()) .OrderBy(false, nameof(User.RoleId), nameof(User.Tel) ) .Page(input); }
没兴趣?那本博客到此结束。小伙伴可以到别处看看了(吐槽下,博客园的这个发布机制属实是看人脸皮和自信度了,我属于脸皮厚的,敢自己推首页).
QueryModel :基础查询类 。
PageModel:分页查询参数类(默认每页分页20条) 。
FullQueryModel:查询模型,对比QueryModel 多了查询集合QueryItems和过滤FilterFields。前端可以在后端给与的基础上,添加查询参数,对于前端来说权限有点大,慎用(建议高级查询的时候用).
FullPageModel:查询模型,对比PageModel多了查询集合QueryItems和过滤FilterFields。慎用(原因同上).
编号查询:编号查询最好是以Id结尾,不然如果编号为字符串的话,查询方式会以Contains形式查询.
时间格式:以 Start,End 结尾 ,生成条件为 >= 和<=.
数字范围:属性名称 以 Min,Max 结尾 ,生成条件为 >= 和<=.
字符串查询: 名字需要和表字段一致,生成条件为 Contains 。
属性名:PropertyName 。
属性值:Value 。
查询方法:Condition 。
查询类型:ConditionType(and/or) 。
是否唯一属性名称:IsSinglePropertyName 。
是否区分大小写:IsCaseSensitive 。
导航父类查询:父类类名+英文符号.+父类的属性名。如 。
[Condition($"{nameof(NewType)}.{nameof(NewType.Name)}")] public string Name { get; set; }
导航子类查询:子类类名+括号[子类属性名]。如 。
[Condition($"{nameof(NewType)}[{nameof(NewType.Name)}]")] public string Name { get; set; }
默认的属性名不符合自己的规则的查询:例如字符串想要正值匹配,可通过特性配置 。
[Condition("Role.RoleName", EnumCondition.Equal, EnumConditionType.And)] public string Name { get; set; }
默认排序方法 DefaultOrderBy(string propName, bool isDesc = true, bool isClearReserved = true)。参数解析:属性名、降序升序、是否清掉之前的排序 。
默认排序方法 AddOrderBy(string propName, bool isDesc = true)。参数解析:属性名、降序升序。可添加多个,优先级按照,添加的顺序来.
/// <summary> /// 设置默认的排序条件,并清空之前保留的排序条件(如果isClearReserved为true)。 /// </summary> /// <param name="input">当前的QueryModel实例。</param> /// <param name="propName">要排序的属性名。</param> /// <param name="isDesc">排序方向,true为降序,false为升序。</param> /// <param name="isClearReserved">是否清空之前保留的排序条件。</param> /// <returns>返回修改后的QueryModel实例。</returns> public static QueryModel DefaultOrderBy(this QueryModel input, string propName, bool isDesc, bool isClearReserved) { // 方法实现 } /// <summary> /// 向QueryModel中添加一个排序条件。 /// </summary> /// <param name="input">当前的QueryModel实例。</param> /// <param name="propName">要排序的属性名。</param> /// <param name="isDesc">排序方向,true为降序,false为升序。</param> /// <returns>返回修改后的QueryModel实例。</returns> public static QueryModel AddOrderBy(this QueryModel input, string propName, bool isDesc) { // 方法实现 } /// <summary> /// 向QueryModel中添加两个排序条件。 /// </summary> /// <param name="input">当前的QueryModel实例。</param> /// <param name="propName">第一个要排序的属性名。</param> /// <param name="isDesc">第一个排序的方向,true为降序,false为升序。</param> /// <param name="propName2">第二个要排序的属性名。</param> /// <param name="isDesc2">第二个排序的方向,true为降序,false为升序。</param> /// <returns>返回修改后的QueryModel实例。</returns> public static QueryModel AddOrderBy(this QueryModel input, string propName, bool isDesc, string propName2, bool isDesc2) { // 方法实现 } /// <summary> /// 向QueryModel中添加三个排序条件。 /// </summary> /// <param name="input">当前的QueryModel实例。</param> /// <param name="propName">第一个要排序的属性名。</param> /// <param name="isDesc">第一个排序的方向,true为降序,false为升序。</param> /// <param name="propName2">第二个要排序的属性名。</param> /// <param name="isDesc2">第二个排序的方向,true为降序,false为升序。</param> /// <param name="propName3">第三个要排序的属性名。</param> /// <param name="isDesc3">第三个排序的方向,true为降序,false为升序。</param> /// <returns>返回修改后的QueryModel实例。</returns> public static QueryModel AddOrderBy(this QueryModel input, string propName, bool isDesc, string propName2, bool isDesc2, string propName3, bool isDesc3) { // 方法实现 } /// <summary> /// 向QueryModel实例中添加一组排序条件。 /// </summary> /// <param name="input">当前的QueryModel实例。</param> /// <param name="orderByItems">包含排序信息的OrderByItem列表。</param> /// <returns>返回修改后的QueryModel实例(在空实现中,实际上只是返回传入的实例)。</returns> public static QueryModel AddOrderBy(this QueryModel input, List<OrderByItem> orderByItems) { // 方法实现 } /// <summary> /// 向QueryModel实例中添加多个排序条件,所有条件使用相同的排序方向。 /// </summary> /// <param name="input">当前的QueryModel实例。</param> /// <param name="isDesc">排序方向,true为降序,false为升序。</param> /// <param name="propNames">要排序的属性名数组。</param> /// <returns>返回修改后的QueryModel实例(在空实现中,实际上只是返回传入的实例)。</returns> public static QueryModel AddMultipleOrderBy(this QueryModel input, bool isDesc, params string[] propNames) { // 方法实现 }
使用特性GroupAttribute。使用分组序号,如Group(1)、如Group(1,EnumConditionType.Or).
[Group(1)] public string Name { get; set; } [Group(1, EnumConditionType.Or)] public string UserName { get; set; }
使用特性DurationAttribute。在时间的两个属性之间中的一个打上这个特性即可。如时间跨度三个月的.
/// <summary> /// 创建时间 开始 /// </summary> [Duration(3, EnumTimeType.Month)] public DateTime? CreateTimeStart { get; set; } /// <summary> /// 创建时间 结束 /// </summary> public DateTime? CreateTimeEnd { get; set; }
没啥好说的:PageIndex 当前页 ,PageSize 显示数.
提供了特性NotQueryAttribute,在对于属性添加即可忽略构建查询.
只要类继承了QueryModel等这四个模型,即可以通过ToExpression<TSource>(),构建对于自己模型的表达式.
常规扩展,根据传入的4大模型过滤。例如 。
/// <summary> /// 查询扩展 /// </summary> public static IQueryable<T> WhereExt<T>(this IQueryable<T> source, QueryModel input) { // } /// <summary> /// 查询扩展,并排序 /// </summary> public static IQueryable<T> WhereExt<T>(this IQueryable<T> source, Expression<Func<T, bool>> expression, params OrderByItem[] orderByItems) { // }
部分查询扩展,可返回传入的模型类(如果属性匹配得上的话) 。
/// <summary> /// Select扩展方法 /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TTarget"></typeparam> /// <param name="query"></param> /// <returns></returns> public static IQueryable<TTarget> Select<TSource, TTarget>(this IQueryable<TSource> query) { }
IQueryable扩展方法 。
/// <summary> /// 根据QueryModel中的条件过滤IQueryable<T>并返回结果列表。 /// </summary> /// <param name="source">待处理的IQueryable<T>。</param> /// <param name="input">包含过滤条件的QueryModel。</param> /// <returns>未经过滤的T类型列表。</returns> public static List<T> ToList<T>(this IQueryable<T> source, QueryModel input) { // 实现 } /// <summary> /// 根据FullQueryModel中的复杂条件过滤IQueryable<T>并返回结果列表。 /// </summary> /// <param name="source">待处理的IQueryable<T>。</param> /// <param name="input">包含复杂过滤条件的FullQueryModel。</param> /// <returns>未经过滤的T类型列表。</returns> public static List<T> ToList<T>(this IQueryable<T> source, FullQueryModel input) { // 实现 } /// <summary> /// 根据PageModel中的分页参数对IQueryable<T>进行分页处理,并返回包含数据列表和总记录数的元组。 /// </summary> /// <param name="query">待分页处理的IQueryable<T>。</param> /// <param name="input">包含分页参数的PageModel。</param> /// <returns>包含未分页数据列表和未计算总记录数的元组。</returns> public static (List<T> list, int total) ToPageList<T>(this IQueryable<T> query, PageModel input) { // 实现 } /// <summary> /// 根据FullPageModel中的分页和过滤条件对IQueryable<T>进行处理,并返回包含数据列表和总记录数的元组 /// </summary> /// <param name="query">待处理的IQueryable<T>。</param> /// <param name="input">包含分页和过滤条件的FullPageModel。</param> /// <returns>包含未分页且未过滤的数据列表和未计算总记录数的元组。</returns> public static (List<T> list, int total) ToPageList<T>(this IQueryable<T> query, FullPageModel input) { // 实现 } /// <summary> /// 对IQueryable<T>进行分页处理,并返回包含数据列表和总记录数的元组。 /// </summary> /// <param name="query">待分页处理的IQueryable<T>。</param> /// <param name="input">包含分页参数的PageModel。</param> /// <returns>包含未分页数据列表和未计算总记录数的元组。</returns> public static (List<T> list, int total) Page<T>(this IQueryable<T> query, PageModel input) { // 实现 } /// <summary> /// 根据FullPageModel中的分页和过滤条件对IQueryable<T>进行处理,并返回包含数据列表和总记录数的元组。 /// </summary> /// <param name="query">待处理的IQueryable<T>。</param> /// <param name="input">包含分页和过滤条件的FullPageModel。</param> /// <returns>包含未分页且未过滤的数据列表和未计算总记录数的元组。</returns> public static (List<T> list, int total) Page<T>(this IQueryable<T> query, FullPageModel input) { // 实现 } /// <summary> /// 根据PageModel中的分页和排序参数对IQueryable<T>进行分页和排序处理,并返回包含排序后数据列表和总记录数的元组。 /// </summary> /// <param name="query">待分页和排序处理的IQueryable<T>。</param> /// <param name="input">包含分页和排序参数的PageModel。</param> /// <returns>包含未分页且未排序的数据列表和未计算总记录数的元组。</returns> public static (List<T> list, int total) OrderPageList<T>(this IQueryable<T> query, PageModel input) { // 实现 } /// <summary> /// 根据FullPageModel中的分页、排序和过滤条件对IQueryable<T>进行处理,并返回包含排序后数据列表和总记录数的元组。 /// </summary> /// <param name="query">待处理的IQueryable<T>。</param> /// <param name="input">包含分页、排序和过滤条件的FullPageModel。</param> /// <returns>包含未分页、未排序且未过滤的数据列表和未计算总记录数的元组。</returns> public static (List<T> list, int total) OrderPageList<T>(this IQueryable<T> query, FullPageModel input) { // 实现 }
IQueryable扩展方法之排序 。
/// <summary> /// 根据单个属性名对IQueryable<TEntity>进行排序。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="propName">要排序的属性名。</param> /// <param name="isDesc">指示排序是否为降序。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, string propName, bool isDesc) { // 实现 } /// <summary> /// 根据两个属性名对IQueryable<TEntity>进行排序。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="propName">第一个要排序的属性名。</param> /// <param name="isDesc">第一个排序是否为降序。</param> /// <param name="propName2">第二个要排序的属性名。</param> /// <param name="isDesc2">第二个排序是否为降序。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, string propName, bool isDesc, string propName2, bool isDesc2) { // 实现 } /// <summary> /// 根据三个属性名对IQueryable<TEntity>进行排序。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="propName">第一个要排序的属性名。</param> /// <param name="isDesc">第一个排序是否为降序。</param> /// <param name="propName2">第二个要排序的属性名。</param> /// <param name="isDesc2">第二个排序是否为降序。</param> /// <param name="propName3">第三个要排序的属性名。</param> /// <param name="isDesc3">第三个排序是否为降序。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, string propName, bool isDesc, string propName2, bool isDesc2, string propName3, bool isDesc3) { // 实现 } /// <summary> /// 根据多个属性名对IQueryable<TEntity>进行排序。属性名和排序方向通过数组提供。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="isDesc">是否所有排序都应为降序,此参数在可变参数场景下可能不被直接使用,而是作为方法重载的标识。</param> /// <param name="propNames">要排序的属性名数组。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, bool isDesc, params string[] propNames) { // 实现 } /// <summary> /// 根据IQueryModel中的排序信息对IQueryable<TEntity>进行排序。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="queryModel">包含排序信息的IQueryModel。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, IQueryModel queryModel) { // 实现 } /// <summary> /// 根据OrderByItem数组中的排序项对IQueryable<TEntity>进行排序。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="orderByItems">包含排序属性和排序方向的OrderByItem数组。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, params OrderByItem[] orderByItems) { // 实现 } /// <summary> /// 根据OrderByItem列表中的排序项对IQueryable<TEntity>进行排序。 /// </summary> /// <param name="input">待排序的IQueryable<TEntity>。</param> /// <param name="orderByItems">包含排序属性和排序方向的OrderByItem列表。</param> /// <returns>未应用排序的IQueryable<TEntity>。</returns> public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> input, List<OrderByItem> orderByItems) { // 实现 }
最后此篇关于Sy.ExpressionBuilder动态查询新体验的文章就讲到这里了,如果你想了解更多关于Sy.ExpressionBuilder动态查询新体验的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有人有跨平台移动应用程序开发框架的经验MoSync ? 听起来不错,很有前途。但它能实现吗? 最佳答案 我们已经使用 MoSync 8 个月了,我对它的感觉很好。对我来说,您使用 C++ 编写代码
我可以相信,我可以使用 HTML5、CSS3 和 JavaScript 开发应用程序,然后使用适用于 Android、iOS 和 Win Phone 7 的 PhoneGap 对其进行编译吗? 这个有
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos 关于虚拟线程
Xedit 是 X11 图形服务器的一部分,它不算好看,但却有足够的隐藏功能,使它成为一个严肃的文本编辑器。 X11 图形服务器由 X.org 发布,它有一些象征性的应用来展示
我一直致力于让使用屏幕阅读器的用户可以访问 Web 内容。对于像我这样的新手,您可以想象我从 Mac -> Windows 或浏览器 -> 浏览器到现在的屏幕阅读器 -> 屏幕阅读器遇到的挫败感。 我
我们希望通过网络共享 AR 体验 (ARWorldMap)(不一定是附近的设备,我指的是可以存储到某个服务器然后由其他用户检索的数据)。 现在我们正在调查 ARWorldMap这非常棒,但我认为它只适
人们可能会认为将 3 个字符的缩写转换为数字表示形式是一项简单的任务。 JavaScript 说“不!”。 $(selector).each(function() { // convert m
我有一堆盒子可以像这样在旋转木马中滑动: 这是我的 div 的结构: 1 2 3 4 5 6 当我的页面加载时,我无法向左滚动,所以我想将向左的箭头
我即将开始一个新的移动应用程序项目,我在 iOS 或 Android 开发方面没有太多经验,但我在不同场合使用 Vaadin 进行演示层。 该应用程序对于移动客户端很可能是轻量级的,但对于后端服务器(
我有兴趣实现分页 UIScrollView 体验,与当前的 Twitter 应用程序非常相似,其中在 View 层次结构的顶部有一个主分页 UIScrollView(水平滚动),以及其他几个(垂直滚动
我想使用一些具有良好性能结果的 .NET IoC 容器。我读了this article关于 IoC 容器性能,DryIoc 和 LightInject 似乎是最好的。但是我没有找到关于它们的一些评论,
我正在为一个重要项目寻找新的 ORM,我习惯于使用 ActiveRecord 进行 nHibernate,并且我已经对 EF4、性能和崩溃的 GUI 有了非常糟糕的体验。 所以在网上搜索我找到了 Su
我们(一个大约 150 人的团队)正在考虑将我们的 ALM 解决方案从 Bugzilla/CVS 迁移到 Jira/svn/Confluence/Bamboo/Fisheye。 SO 有很多关于这些的
为网站创建丰富的 AJAX 体验,类似于 http://www.pageflakes.com/动态加载不同的内容区域,我正在考虑使用 JQuery 来做到这一点,使用 load 方法动态加载页面的特定
我想做一些分布式计算。使用 GPU 进行机器学习?只是想知道是否有人有使用 MXNET 的经验(perf. vs Theano) 引用资料 http://www.cs.cmu.edu/~muli/fi
苹果终于推出了所谓的auto-renewable subscriptions昨天。由于我在应用内购买方面的经验很少(仅限沙盒),所以我不确定我在这里是否一切顺利。似乎需要对收据进行服务器端验证。找出订
我使用 Azure AD B2C 作为 Dynamics CRM 门户应用程序的身份验证解决方案。到目前为止,B2C 允许自定义注册体验,我已经这样做来自定义注册/登录页面的外观和感觉,但我没有看到任
目标:当我们在浏览器上滚动 youtube 时,整个页面向下滚动,我想创建两个滚动器: 留下一个用于视频和评论滚动。 右边的一个用于下一个(推荐的视频)滚动。 我发现我们可以使用 overflow:
在SFSafariViewController描述是这样写的 您将使用 SFAuthenticationSession 的两种情况是: Logging in to a third party's se
你好,我需要在像 这样的聊天屏幕中开发像 whats app 这样的布局在此我想在聊天 TextView 完成后显示时间。 我已经做到了
我是一名优秀的程序员,十分优秀!