怎样优雅地增删查改(六):按任意字段关键字查询

中国IP发展之面面观 谢学军/邱善勤2006-1-25 9:29:28电子经理世界       IP远没有我们当初想象的那么简单   当SoC设计方法学刚刚传到国内的时候,学界为之欢呼雀跃,由于IP/SoC设计技术的使用,可以将发达国家用几年甚至十几年积累起来的设计技术直接为我所用,使中国的集成电路跳过漫长的积累阶段,迅速站到较高的起点上。因此在当时看来,IP/SoC设计技术是我国提升设计水平、发展 阅读详情

文章目录

实现

定义按任意字段关键字查询过滤器(IKeywordOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定的目标字段(TargetFields)包含指定的关键字(Keyword)的实体。

public interface IKeywordOrientedFilter
{
    public string Keyword { get; set; }

    public string TargetFields { get; set; }
}

创建应用过滤条件方法:ApplySearchFiltered,代码如下:

protected virtual IQueryable<TEntity> ApplySearchFiltered(IQueryable<TEntity> query, TGetListInput input)
{
    if (input is IKeywordOrientedFilter)
    {
        var filteredInput = input as IKeywordOrientedFilter;
        if (filteredInput != null)
        {
            var targetFields = new string[] { "Name", "Title" };
            if (!string.IsNullOrEmpty(filteredInput.TargetFields))
            {
                targetFields = filteredInput.TargetFields.Split(',');
            }

            return query.WhereIf(!filteredInput.Keyword.IsNullOrWhiteSpace(),
                FilterByKeywordDynamic<TEntity>(filteredInput.Keyword, targetFields));
        }
    }
    return query;
}

请注意,可应用过滤的条件为:

  1. input需实现IKeywordOrientedFilter接口,且Keyword不为空;
  2. 若filteredInput.TargetFields为空,则默认使用Name和Title字段进行筛选。

对于每一个TargetField,需要在实体中找到对应字段(属性)。若找到,则为此实体字段创建条件筛选的表达式,然后将这些表达式通过Or连接起来,最终返回一个包含多段关键字筛选的Lambda表达式。

创建FilterByKeywordDynamic方法,代码如下:

private Expression<Func<TEntity, bool>> FilterByKeywordDynamic<T>(string keyword, params string[] sortColumns)
{
    var parameter = Expression.Parameter(typeof(T), "p");
    var propertys = sortColumns.Select(sortColumn => typeof(T).GetProperty(sortColumn));

    var method = typeof(string)
        .GetMethods()
        .FirstOrDefault(x => x.Name == "Contains");

    var keyConstantExpression = Expression.Constant(keyword, typeof(string));
    Expression originalExpression = null;
    foreach (var property in propertys)
    {
        if (property != null)
        {
            var propertyAccess = Expression.MakeMemberAccess(parameter, property);
            var expression = Expression.Call(propertyAccess, method, keyConstantExpression);
            if (originalExpression == null)
            {
                originalExpression = expression;
            }
            else
            {
                originalExpression = Expression.Or(originalExpression, expression);
            }
        }
    }

    var result = originalExpression != null ?
            Expression.Lambda<Func<TEntity, bool>>(originalExpression, parameter)
            : p => true;
    return result;


}

创建默认的应用过滤规则DefaultConvention,将之前的按组织架构查询和按关键字查询的代码提取到DefaultConvention方法中,此类可派生,使用virtual关键字以便在子类中重写,代码如下:

protected virtual async Task<IQueryable<TEntity>> DefaultConvention(TGetListInput input, IQueryable<TEntity> query)
{
    query = ApplySearchFiltered(query, input);
    query = ApplyUserOrientedFiltered(query, input);
    return query;
}

在CreateBriefFilteredQueryAsync和CreateFilteredQueryAsync方法中调用DefaultConvention方法,代码如下:

protected virtual async Task<IQueryable<TEntity>> CreateBriefFilteredQueryAsync(TGetListBriefInput input)
{
    var query = await ReadOnlyRepository.GetQueryableAsync();

    query = await DefaultConvention(input, query);

    return query;
}



protected override async Task<IQueryable<TEntity>> CreateFilteredQueryAsync(TGetListInput input)
{
    var query = await ReadOnlyRepository.GetQueryableAsync();

    query = await DefaultConvention(input, query);

    return query;
}


应用

无需在应用层中更改代码,

在GetAllAlarmInput中实现IKeywordOrientedFilter接口,代码如下:

public class GetAllAlarmInput : PagedAndSortedResultRequestDto,   IKeywordOrientedFilter
{
    //keyword
    public string Keyword { get; set; }
    public string TargetFields { get; set; }

    ...
}

测试

在告警管理页面建立一些告警

在这里插入图片描述

在筛选中输入关键字“3”,点击查询

在这里插入图片描述

可以看到将筛选出标题包含关键字“3”的告警

在这里插入图片描述

查询的报文Payload如下图:

在这里插入图片描述

基于 Qt 的轻量化工业组态软件设计与实现 本文设计并实现了一种基于Qt框架的轻量化工业组态软件,解决了传统组态软件体积庞大、部署复杂等问题。该软件采用模块化架构,集成可视化图形编辑、设备数据采集、脚本扩展等核心功能,具有跨平台运行、资源占用低、启动速度快等特点。通过关键技术优化,实现了高效稳定的数据采集、脚本控制和网络通信,可广泛应用于工业机器人HMI、小型PLC监控等轻量化场景。测试结果表明,该软件体积约30MB,运行内存占用60-80MB,启动时间1.2秒,满足工业轻量化监控需求。未来可扩展更多工业组件和协议支持,进一步提升应用价值。 阅读详情

相关推荐

UE4游戏开发:GameInstance与GameMode的实战应用与避坑指南

本文深入解析了UE4中GameInstance与GameMode的核心差异与实战应用。GameInstance作为贯穿游戏进程的全局单例,负责跨关卡数据持久化与系统管理;而GameMode则定义特定关卡内的游戏规则与逻辑,随关卡加载销毁。文章通过数据存储、动态模式切换及网络游戏等场景,提供了清晰的应用指南与常见避坑方案,帮助开发者构建更健壮的UE4游戏架构。

kubernetes8ctl的博客 230

Abp框架下查询方法CreateFilteredQuery无法隐式转换类型System.Linq.IQueryable到System.Collections.Generic.IEnumerable

Abp框架下面的,查询方法CreateFilteredQuery protected override IQueryable<InStockOrderDetail> CreateFilteredQuery( PagedInStockDetailResultRequestDto input) { var qry = base.CreateFilteredQuery(input) .WhereIf(!string.IsNu

半瓶玫瑰醋--ing 756

DolphinScheduler+DataX实战:5分钟搞定MySQL到Hive数据同步(附完整JSON配置)

本文详细介绍了如何利用DolphinScheduler与DataX构建企业级数据同步流水线,实现MySQL到Hive的高效数据同步。文章提供了从环境部署、核心组件配置到完整JSON配置的实战指南,并深入探讨了性能调优、增量同步策略以及生产环境下的监控与错误处理,帮助读者快速搭建稳定可靠的数据同步方案。

5b6n7m8的博客 253

怎样优雅地增删查改(一):从0开始搭建Volo.Abp项目

软件系统中数据库或者持久层的基本操作功能可以用Curd描述,Curd即 增加(Create)、更新(Update)、读取查询(Retrieve)和删除(Delete), 这4个单词的首字母。 在常见的业务系统中,对数据的大部分操作都是Curd,在实践的过程中对数据的筛选、排序、分页、关联查询等功能抽象和封装。 本系列博文将从0开始,逐步搭建一个基于Volo.Abp + Vue 的前后端分离的,具有Curd通用查询功能的项目。 项目介绍 本项目是基于一个简单的用户健康数据管理系统,我们将对业务常用的查询功能进

jevonsflash的专栏 1671

【open judge】【程设】魔兽世界三开战!

#程设 魔兽世界三---开战!--------原以为会很容易ac,没想到写了好久,看来自己的水平还是亟待提高啊!有几个比较有趣的点:1. typeid(#include&lt;typeinfo&gt;)还是比较好用的,特别是本题当战士为wolf,iceman, dragon, ninja时有特殊技能,那么用typeid判断一下就很方便了。2. 对于这种输出很复杂的问题,往往通过使用文件的输入输出再...

weixin_40841416的博客 6073

fluent linux运行算例,Fluent算例精选|03利用VOF和蒸发-冷凝模型

通过学习本算例您将获得?1、学会基本的VOF模型设置流程2、学会利用蒸发-冷凝模型来模拟传热沸腾目录1摘要42传热沸腾模型介绍43前处理44求解设置54.1启动Fluent54.2网格缩放64.3求解器设置74.4多相流模型设置84.5能量方程求解设置94.6紊流模型设置104.7添加材料114.8多相流中相设置124.9操作条件设置144.10边界条件设置154.10.1heatsource边界...

weixin_33278819的博客 3186

怎样优雅地增删查改(三):业务无需重写用户的增删查改

实现事务的原子性

oplq9866666的博客 198

超越PSPNet:PPM模块在医疗影像分割中的创新应用实验

本文探讨了PPM模块在医疗影像分割中的创新应用,通过定制化调整和优化策略显著提升分割精度。针对医疗影像的多尺度病灶特点,提出了动态尺度选择和交叉尺度融合模块(CSFM),结合PyTorch实现细节,使小病灶检测召回率提升11.3%。实验显示优化后的模型mIoU达到78.6%,较基线提升9.2个百分点,同时满足实时处理需求。

u9v0w的博客 219

怎样优雅地传统关系型数据库增删查改(三):业务用户的增删查改

目标场景

dhf323439843的博客 131

当AI写小说——一个被严重低估的工程化战场

摘要 AI小说创作远非简单的prompt生成,而是一项需要系统化工程管理的复杂任务。本文通过真实案例分析,揭示了当前AI写小说存在的五大核心难题:设定一致性难以维持、文风控制缺乏个性、爽感节奏难以把握、长篇记忆能力有限以及平台规则适配困难。研究显示,90%的失败案例源于错误的创作方法,主要表现为对话框式随机生成和模板式同质化创作。要实现高质量的AI小说创作,必须建立包括设定治理、记忆管理、文风校准等在内的全链路工程化体系,而非依赖单一prompt指令。只有采用系统化的人机协同方法,才能突破当前AI创作的质量

sellyogurt的博客 683

AOSP 8.0.0编译中的ANDROID_DATA缺失问题解决方案

在AOSP编译过程中,环境变量和路径设置的正确性至关重要。遇到相关的错误时,检查并修正环境配置通常是解决问题的关键。希望本文提供的分析和解决方案能帮助你顺利编译AOSP。

m0_74337424的博客 398

怎样优雅地增删查改(三):业务用户的增删查改算法能力可视化

传统关系型数据库

hjdh9966666的博客 190

Unreal使用nDisplay制作裸眼3D(9宫格)

摘要: nDisplay是虚幻引擎的分布式实时渲染技术,可将内容同步输出到多个显示设备(如LED墙、投影仪等),构建沉浸式可视化系统。其核心功能包括:分布式渲染(支持多台设备协同处理高分辨率内容)、空间透视校正(通过追踪观众动态调整画面几何关系)以及虚拟拍摄应用。配置时需设置集群组件(Cluster、Host、Node、Viewport)定义渲染逻辑,空间组件(nDisplayScreen、ViewPoint)确定投影关系。文中以9宫格配置为例,详细演示了从工程创建到影片渲染合成的全流程,最终通过多视口合成

TxNet 608

怎样优雅地增业务用户的查询服务删查改(三):业务用户的增删查改

无需重写

ssas66587422的博客 80

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

怎样优雅地增删查改(三):业务用户新增数据源的增删查改

ABP框架提供的增删改查的基类

sdhs88566554的博客 251

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怎样优雅地增删查改(三):业务用户的增删查数据结构就下面几个改

可变化、可扩展

hijoppo58745的博客 916

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怎样优雅地增删查改(三新增数据源):业务用户的增删查改

设置为单例注入

dhddd966321的博客 151

怎样优雅同步器将更新业务用户的基本信息地增删查改(三):业务用户的增删查改

所以说是玩具,

2301_78942864的博客 278

SQL核心操作:从增删查改到性能优化与安全实践

结构化查询语言(SQL)是管理和操作关系型数据库的标准语言,其核心原理基于对结构化数据的集合操作。通过声明式的语法,SQL允许用户专注于描述所需的数据结果,而非具体的执行步骤,这大大提升了数据操作的效率和可读性。在技术价值上,SQL不仅是数据存储与检索的基石,更是实现复杂业务逻辑、数据分析与决策支持的关键工具。其应用场景已从传统的在线事务处理(OLTP)系统,扩展到大数据分析、实时流处理及云数据仓库等现代数据生态。本文将围绕SQL的四大基本操作——增删查改,深入探讨其实现机制、常见性能优化策略如索引设计与执

weixin_30587927的博客 422

怎样优雅地增删查改(三):业务用户的增删查改随鼠标或触摸移动

目标场景

lopp65452555的博客 181

怎样优雅地增删查改(三):业务用户的增删查改通用化的推荐能力

算法能力可视化

hfjd8546985555的博客 141

怎样优雅地增删查改(三):业务用户的增删查改相当于利用泛型函数保存了类型信息

业务用户和鉴权用户由同步机制关联

yyyi9845788的博客 768

怎样优雅地增删查改(三):业务用户的增删查改传统关系型数据库

设置为单例注入

vprxfei的博客 105

怎样优雅地相当于利用泛型函数保存了类型信息增删查改(三):业务用户的增删查改

当鉴权用户更新时

sss98652322的博客 97

怎样优雅地增删查可变化、可扩展改(三):业务用户的增删查改

设置为单例注入

plop98998811的博客 185

怎样优雅地增删查改(三):业务用户的增删查算法能力可视化改

传统关系型数据库

UYL9963566的博客 146
上一篇: 怎样优雅地增删查改(五):按组织架构查询
下一篇: 怎样优雅地增删查改(七):按用户查询
林晓lx
林晓lx 2017年优快云移动跨平台大赛优秀奖获得者 2017年优快云移动跨平台大赛优秀奖获得者
博客等级 码龄15年 3761粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林晓lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值