NReco.LambdaParser使用案例
使用案例集合:
private async void RuleEngine_Click(object sender, EventArgs e){#region 获取变量string expression = this.Rule.Text.Trim();string pattern = @"\$(.*?)\$";MatchCollection matches = Regex.Matches(expression, pattern);foreach (Match match in matches){string variableName = match.Groups[1].Value;}#endregion#region 执行器初始化var lambdaParser = new LambdaParser();lambdaParser.AllowVars = true;#endregion#region 变量初始化var tagsql = string.Empty;var dictLast = new Dictionary<string, object>();#endregion#region 常用方法与数据定义dictLast["PI"] = 3.14M;dictLast["Now"] = DateTime.Now;dictLast["Not"] = (Func<bool, bool>)((t) => !t);dictLast["Max"] = (Func<decimal, decimal, decimal>)((a, b) => Math.Max(a, b));dictLast["Yes"] = true;dictLast["No"] = false;dictLast["arr"] = new double[] { 1.5, 2.5 };dictLast["dic"] = new Dictionary<string, int>(){{"apple", 1},{"banana", 2},{"orange", 3}};dictLast["Alert"] = (Func<string, string>)((msg) => AlertAsync(msg));#endregion#region 判断字符是否正确输入string input = "Now.ToString(\"yyyy-MM-dd/HH\")";string backslash = @"(?<!\\)"""; // 匹配没有被转义的双引号MatchCollection matches2 = Regex.Matches(input, backslash);if (matches.Count > 0)Console.WriteLine("双引号没有被正确转义");elseConsole.WriteLine("双引号都有正确转义");#endregion#region testConsole.WriteLine(lambdaParser.Eval("Now.ToString(\"yyyy-MM-dd/HH\")", dictLast));Console.WriteLine(lambdaParser.Eval("Max(Max(3,4),2)", dictLast));Console.WriteLine(lambdaParser.Eval("arr[0]+arr[1]", dictLast)); // -> 4Console.WriteLine(lambdaParser.Eval("dic[\"apple\"]+arr[1]", dictLast)); // -> 3.5Console.WriteLine(lambdaParser.Eval("(new[]{1,2})[1]", dictLast)); // 2#endregionint i = 0;foreach (var v in this.Variables.Text.Trim().Split(',')){if (i == 0)tagsql = this.DataSet1.Text.Trim();elsetagsql = this.DataSet2.Text.Trim();var rtTagInfos = await _dbInstance.DBOperation.QueryAsync<dynamic>(tagsql);if (rtTagInfos.Count() == 1){var dictSingle = ((IDictionary<string, object>)rtTagInfos.FirstOrDefault()).ToDictionary(kvp => kvp.Key.Split(new[] { '(', ')' }).LastOrDefault(), kvp => kvp.Value);dictLast = dictLast.Union(dictSingle).ToDictionary(x => x.Key, x => x.Value);}else{#region 没有去重//var keyValuePairs = new List<KeyValuePair<string, object>>();//foreach (var record in rtTagInfos)//{// int i = 0;// string propertyName = string.Empty;// foreach (var property in (IDictionary<string, object>)record)// {// if (i == 0)// propertyName = Convert.ToString(property.Value);// else// keyValuePairs.Add(new KeyValuePair<string, object>(propertyName, property.Value));// i = i + 1;// }//}//var dictlist = keyValuePairs.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);#endregionvar keyValuePairs = new HashSet<KeyValuePair<string, object>>();Parallel.ForEach(rtTagInfos, (record) =>{int i = 0;string propertyName = string.Empty;foreach (var property in (IDictionary<string, object>)record){if (i == 0){propertyName = Convert.ToString(property.Value);}else{var keyValuePair = new KeyValuePair<string, object>(propertyName, property.Value);lock (keyValuePairs){if (!keyValuePairs.Contains(keyValuePair)){if (!keyValuePairs.Any(kvp => kvp.Key == keyValuePair.Key)){keyValuePairs.Add(keyValuePair);}}}}i = i + 1;}});var dictlist = keyValuePairs.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);dictLast = dictLast.Union(dictlist).ToDictionary(x => x.Key, x => x.Value);}i = i + 1;}var res = lambdaParser.Eval(this.Rule.Text.Trim().Replace("$", ""), dictLast);MessageBox.Show(res?.ToString());}public string AlertAsync(string msg){var time = "SELECT NOW() as now";var rtTagInfos = AsyncHelper.RunSync(() => _dbInstance.DBOperation.QueryFirstOrDefaultAsync<DateTime>(time));return msg + rtTagInfos.ToString();}
$reportvalue$<1234?"1":Alert("告警:")
相关文章:
NReco.LambdaParser使用案例
使用案例集合: private async void RuleEngine_Click(object sender, EventArgs e){#region 获取变量string expression this.Rule.Text.Trim();string pattern "\$(.*?)\$";MatchCollection matches Regex.Matches(expression, pattern);foreach (Ma…...
苹果IOS安装IPA, plist形式 Safari 浏览器点击安装
快速链接 苹果开发者账号链接 网址: https://developer.apple.com/account 苹果应用上架链接 网址: https://appstoreconnect.apple.com/ 应用证书文件及打包 参考教程: 最新uniapp打包IOS详细步骤(2022) 证书在线制作工具 网址: https://app.121xuexi.…...
Django 注册及创建订单商品
注册功能的实现 user/views from rest_framework.generics import GenericAPIView from rest_framework.views import APIViewfrom apps.user.models import User from apps.user.serializers import UserSerializer from utils import ResponseMessage from utils.jwt_auth …...
15、Python -- 阶段总结:变量与流程控制
目录 变量变量没有类型,数据有类型 表达式程序流程 变量 变量:编程的本质就是处理数据,数据需要用变量保存 Python语言的特征: 所有变量无需声明,即可使用 变量没有类型 变量没有类型,数据有类型 已学过…...
信息检索与数据挖掘 | 【实验】排名检索模型
文章目录 📚实验内容📚相关概念📚实验步骤🐇分词预处理🐇构建倒排索引表🐇计算query和各个文档的相似度🐇queries预处理及检索函数🔥对输入的文本进行词法分析和标准化处理…...
玩转AIGC:打造令人印象深刻的AI对话Prompt
玩转AIGC:打造令人印象深刻的AI对话Prompt 《玩转AIGC:打造令人印象深刻的AI对话Prompt》摘要引言正文良好的Prompt:引发AI深度交流的法宝 ✨探讨不同的提问方式1. 常规提问2. 创意提问 对话交流的艺术:倾听与引导的巧妙平衡 ⚖️…...
uniapp vue国际化 i18n
一、安装 vue-i18n npm i vue-i18n 二、新建i18n目录 1、en.json 内容 {"loginPage":{"namePh":"Please enter your login account","passwordPh":"Please enter password"} } 2、zh-CN.json 内容 {"loginPage&qu…...
Docker 启动远程服务访问不了
今天一下午在弄这个 1、防火墙是否关了 firewall-cmd --state2、ip转发开没开 sysctl net.ipv4.ip_forward3、service iptables是不是打开并拦截了 4、检查docker启动的端口号是否一致,或者启动时对不对 5、检查docker的服务是否起来了,比如你的端口号…...
[ACTF2020 新生赛]Exec
【解题过程】 1.打开链接 得到一个能ping 的网站,可以推测这个可以在终端运行的网站。 2.解题思路 在执行的时候我们可以想到命令执行的“;”分号的作用:命令用分号分隔开来,表示它们是两个独立的命令,需要依次执行。…...
Git(三).git 文件夹详解
目录 一、初始化新仓库二、.git 目录2.1 hooks 文件夹2.2 info 文件夹2.3 logs 文件夹2.4 objects 文件夹【重要】2.5 refs 文件夹【重要】2.6 COMMIT_EDITMSG2.7 config2.8 description2.9 FETCH_HEAD2.10 HEAD【重要】2.11 index【重要】2.12 ORIG_HEAD2.13 packed-refs 官网…...
esp32-S3 + visual studio code 开发环境搭建
一、首先在下面链接网页中下载esp-idf v5.1.1离线安装包 ,并安装到指定位置。dl.espressif.cn/dl/esp-idf/https://dl.espressif.cn/dl/esp-idf/ 安装过程中会提示需要长路径支持,所以windows系统需要开启长路径使能 Step 1: 打开运行&…...
4.1 网络基础之网络IO
一、编写基本服务程序流程 1、创建套接字 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, int type, int protocol);/* * 参数domain通讯协议族: * PF_INET IPv4互联网协议族(常用) * PF_INET6 …...
[100天算法】-和为 K 的子数组(day 39)
题目描述 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 :数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整…...
Leo赠书活动-02期 【信息科技风险管理:合规管理、技术防控与数字化】
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…...
L2-026 小字辈 - java
L2-026 小字辈 时间限制 400 ms 内存限制 64 MB 题目描述: 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,…...
排序算法-堆积树排序法(HeapSort)
目录 排序算法-堆积树排序法(HeapSort) 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法(HeapSort) 1、说明 堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序…...
名词解释 MongoDB
MongoDB 是一个面向文档的数据库管理系统,它不使用传统的表格结构,而是将数据组织成类似文档的形式,通常使用JSON格式。 文档数据库:数据以文档的形式存储,每个文档可以包含不同的字段,就像一个文件可以包…...
Look Back(cf div3 905)
题意:给你一个长度为n((1≤n≤10^5)数组a[],你可以进行一个操作 使a[i]a[i]*2,问最少经过多少次这样的操作使的a[]不递减,a[i]>a[i-1]。 输入样例: 6 1 1 2 1 1 3 1 2 1 4 2 3 2 1 5 4 5 4 5 4 10 1 7 7 2 3 4 3 2 1 100 输出…...
Spring框架的发展历程
Spring框架的发展历程 自2004年以来,Spring框架已经成为Java开发人员最受欢迎的开源框架之一。它提供了一个全面的编程和配置模型,旨在简化企业级Java应用程序的开发过程。本文将详细介绍Spring框架的发展历程,以及它如何为Java开发人员提供…...
vue 级联查询5级--省/市/区/街道/社区
<template> <div> 1234 <el-select v-model="provinceVal" @change="selectProvinceFn" placeholder="请选择"> <el-option v-for="item in provinceList" :key="item.code" :label="item.name&q…...
导师推荐!盘点2026年好评如潮的AI论文平台
一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文平台正在席卷学术圈,覆盖选题构思、文献综述、内容生成、降重润色与格式排版全流程,真正帮你高效搞定论文写作。 一、全流程王者:一站式搞定论文全链路&…...
tcc-g15:硬件级散热控制的开源替代方案 | 轻量无广告设计
tcc-g15:硬件级散热控制的开源替代方案 | 轻量无广告设计 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 tcc-g15作为Dell G15系列游戏本的开源替代…...
图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧
图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧 当你在处理一张模糊的医学影像或卫星图片时,是否想过那些隐藏在像素背后的频率秘密?傅里叶变换就像一台精密的频谱分析仪,能将图像从空间域转换到频域,…...
COMSOL 物质传递建模仿真:氯气洗涤与液膜除氯的奇妙之旅
COMSOL物质传递建模仿真 comsol物质传递反应 氯气洗涤,液膜除氯 液膜交界面氯气浓度衰减在化工领域,物质传递与反应的模拟对于优化工艺、提高效率至关重要。今天咱就唠唠基于 COMSOL 的物质传递建模仿真,特别是围绕氯气洗涤以及液膜除氯这俩关…...
Skills 如何高效地扩展 Claude 的能力
在模块化配置体系中,rules(规则)决定了 Claude 的下限(不能搞砸什么),而 skills(技能)则决定了 Claude 的上限(能多快、多准地完成复杂任务)。高效扩展 Claud…...
OpCore Simplify:革新黑苹果配置流程——从繁琐到智能的EFI构建方案
OpCore Simplify:革新黑苹果配置流程——从繁琐到智能的EFI构建方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款…...
本地部署开源推送通知系统 ntfy 并实现外部访问
ntfy 是一款简单、轻量级且功能强大的开源推送通知系统,它的核心目标是让用户或开发者能够轻松地从任何设备、任何地方向自己的手机或桌面发送通知。本文将详细介绍如何在 Linux 系统局域网内部署 ntfy 并结合路由侠实现外网访问局域网内部署的 ntfy 。 第一步&…...
Tendis水平扩展实战:在线数据迁移与节点扩容最佳实践
Tendis水平扩展实战:在线数据迁移与节点扩容最佳实践 【免费下载链接】Tendis Tendis is a high-performance distributed storage system fully compatible with the Redis protocol. 项目地址: https://gitcode.com/gh_mirrors/te/Tendis Tendis作为腾讯开…...
JDK 25模块路径在统信UOS/麒麟V10上启动失败?3步定位osgi-container冲突、jni.so符号缺失与jmod签名验签绕过方案
第一章:Java 25 模块化部署国产化适配方案Java 25 引入了更严格的模块系统约束与原生镜像增强能力,为在麒麟V10、统信UOS、openEuler等国产操作系统上实现轻量、安全、可验证的Java应用部署提供了新路径。适配核心聚焦于JVM层兼容性、模块图裁剪、国密算…...
【数字信号调制】GMSK调制解调系统【含Matlab源码 15239期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…...
