当前位置: 首页 > news >正文

网站设计公司哪家比较好上海招聘用的最多的网站

网站设计公司哪家比较好,上海招聘用的最多的网站,链接提交使用说明,运营平台是什么意思一#xff1a;背景1. 讲故事记的在上一家公司做全内存项目的时候#xff0c;因为一些关键表会在程序 startup 的时候全量灌入到内存中#xff0c;但随着时间的推移#xff0c;内存和数据库的同步偶尔会出现数据差异的情况#xff0c;伴随着就是运营那边报过来的 bug#… 一背景1. 讲故事记的在上一家公司做全内存项目的时候因为一些关键表会在程序 startup 的时候全量灌入到内存中但随着时间的推移内存和数据库的同步偶尔会出现数据差异的情况伴随着就是运营那边报过来的 bug检查数据库的数据完整性很简单直接写一些 sql 验证一下就好了但校验内存中的数据就非常麻烦了因为你不能像写 sql 一样直接去查生产中的内存集合那怎么办呢为了方便演示问题先上一段演示代码class Program{static void Main(string[] args){var tradeList new ListTrade(){new Trade(){TradeID1, TradeTitle交易1, CreatedConvert.ToDateTime(2020/8/1), CustomerID1},new Trade(){TradeID2, TradeTitle交易2, CreatedConvert.ToDateTime(2020/8/5),CustomerID2},new Trade(){TradeID3, TradeTitle交易3, CreatedConvert.ToDateTime(2020/8/10), CustomerID3}};}}class Trade{public int TradeID { get; set; }public string TradeTitle { get; set; }public DateTime Created { get; set; }public int CustomerID { get; set; }} 上面的 tradeList 就是内存中的集合现在有一个问题我想查询一下 trade 表中 CustomerID in (1,2,10) Created 2020-08-01 的记录是否和内存中的 tradelist 一致。用 sql 验证太简单了直接在查询分析器里面写一下sql 搞定如下图那在 UI 上 怎么验证呢二寻找解决方法1. 在UI上自定义高级查询这个也是大家最容易想到的使用多个 if 叠加查询条件如下代码所示static void Main(string[] args){var tradeList new ListTrade(){new Trade(){TradeID1, TradeTitle交易1, CreatedConvert.ToDateTime(2020/8/1), CustomerID1},new Trade(){TradeID2, TradeTitle交易2, CreatedConvert.ToDateTime(2020/8/5),CustomerID2},new Trade(){TradeID3, TradeTitle交易3, CreatedConvert.ToDateTime(2020/8/10), CustomerID3}};IEnumerableTrade query tradeList;//UIvar queryCustomerIDList new Listint() { 1, 2, 10};var queryCreated 2020-08-01;if (queryCustomerIDList.Count 0){query query.Where(m queryCustomerIDList.Contains(m.CustomerID));}if (string.IsNullOrEmpty(queryCreated)){query query.Where(m m.Created Convert.ToDateTime(queryCreated));}//最后的结果var list query.ToList();} 问题貌似是可以解决但是这种用 if 叠加的方式不觉得太不灵活了吗如果客户心情不好又来了一个 TradeID between 1 and 10 的筛选条件那上面的代码是不是还得加一个 TradeID 的判断 太麻烦了还得继续寻找更灵活的姿势。2. 使用DataTable哈哈大家看到 DataTable 是不是有一点懵逼可不要小瞧这玩意人家可是直接支持 sql 查询的哦这灵活性不容小觑哈上一段代码说话static void Main(string[] args){var tradeList new ListTrade(){new Trade(){TradeID1, TradeTitle交易1, CreatedConvert.ToDateTime(2020/8/1), CustomerID1},new Trade(){TradeID2, TradeTitle交易2, CreatedConvert.ToDateTime(2020/8/5),CustomerID1},new Trade(){TradeID3, TradeTitle交易3, CreatedConvert.ToDateTime(2020/8/10), CustomerID3}};var table CopyToDataTable(tradeList);var query table.Select(CustomerID in (1,2,10) and Created 2020-08-01 and TradeID 1 and TradeID 10).Select(m new Trade(){TradeID Convert.ToInt32(m[0]),TradeTitle Convert.ToString(m[1]),Created Convert.ToDateTime(m[2]),CustomerID Convert.ToInt32(3)}).ToList();}public static DataTable CopyToDataTableT(IEnumerableT array){var ret new DataTable();foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))ret.Columns.Add(dp.Name);foreach (T item in array){var Row ret.NewRow();foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))Row[dp.Name] dp.GetValue(item);ret.Rows.Add(Row);}return ret;} 是不是很强大直接将文本化的 sql 塞入到 DataTable 中你想什么样的查询你就写什么样的 sql 就 ok 啦当然理论归理论在我的场景中肯定是不会这么玩的毕竟内存中的 trade 有上千万行转成 DataTable 不是给自己挖坑嘛那有没有其他的方式呢3. 使用 表达式树 ExpressionTree我想很多人看到 表达式树 都会退避三舍虽然这玩意很强大但是太复杂了它会将你的查询语句拆解成树中的节点从而构建一棵非常复杂的树结构其实 DataTable 对 sql语句的解析也是在内存中构建了一棵解析树所以这玩意太反人类了比如你要构建 i 5 的查询你需要下面这样的硬编码这还是非常简单的哈复杂的会让你吐血。 ParameterExpression param Expression.Parameter(typeof(int), i);ConstantExpression constExp Expression.Constant(5, typeof(int));BinaryExpression greaterThan Expression.GreaterThan(param, constExp);ExpressionFuncint, bool f Expression.LambdaFuncint, bool(greaterThan, param);Funcint, bool mydelegate f.Compile();Console.WriteLine(mydelegate(5)); 从图中可以看到55 False 是没有问题的既然表达式树是可以解决类似这样的场景聪明的你应该会想到开源社区是否又类似封装好的 ExpressionTree 开发包呢说实话还真有。。。4. DynamicExpresso 开发工具包开源大法好github地址https://github.com/davideicardi/DynamicExpresso 这玩意实现了 将文本化的 C# 语句 动态转换成 delegate这句话是什么意思呢大家可以看一下这张图从上图可以看到你可以 写一些文本化的 C# 语句然后经过 DynamicExpresso 处理后转换成了可执行 delegate如果你没看懂我用代码表示一下,如下图:其中 30 5 * 8 / 2 10 重点在于这里的 数学表达式 是文本的有了这个思路那我是不是也可以将 tradeList 的查询条件文本化表示如下代码var interpreter new Interpreter();interpreter.Reference(typeof(System.Linq.Enumerable));interpreter.SetVariable(arr, new int[] { 1, 2, 10 });string whereExpression (trade.CustomerID 1 || trade.CustomerID2 || trade.CustomerID10) trade.Created Convert.ToDateTime(\2020-08-01\) trade.TradeID 1 trade.TradeID 10;FuncTrade, bool queryFunc interpreter.ParseAsDelegateFuncTrade, bool(whereExpression, trade);var list tradeList.Where(queryFunc).ToList();var i Enumerable.Contains(new int[] { 1, 2, 3 }, 3); 问题搞定还是比较完美的 ????????????三总结总的来说有了DynamicExpresso 我就可以将 文本化的 C#语句 直接丢给 Where 条件就可以灵活检索完美的解决了在内存中查询 tradelist 数据分布情况当然目前的 DynamicExpresso 还有很多语句不支持不过都在完善中期待大家支持点赞加贡献。
http://www.sadfv.cn/news/109996/

相关文章:

  • 河北建设工程招标投标协会网站上海协策网站
  • 贵阳网站建设培训班温州市鹿城区建设小学网站
  • 如何做盗版视频网站交流网站建设心得体会
  • 永康物流网站开发平台网站建设目标概括
  • 企业网站建设 电脑配置花店网页制作素材
  • 微商城网站建设价位济南网络科技公司排名
  • 中山网站备案只有网站才需要域名吗
  • 网站建设官网怎么收费展示型网站与营销型网站
  • 做网站编辑是不是也要做推广企业图标设计大全
  • 网站开发设计文档域名名称是什么
  • 网站建设预算模板大型网站建设企业名录模板
  • 广州注册公司核名在哪个网站岳阳网站开发服务
  • 国外源代码下载网站杭州网站建设模板
  • 网站开发备案费用建立个人网站用虚拟主机
  • 大连企业网站开发移动网站seo
  • 电话销售做网站网站建设柒首先金手指8
  • 网站建设交互效果软件工程考研难度
  • 想做一个什么样的网站静安正规的设计公司网站
  • 专业手机建站公司网上推广赚钱方法
  • 南昌地宝网租房个人房源潍坊百度推广优化
  • 做外贸自己公司的网站一定要吗昆明网站网站建设
  • 免费网站空间免备案南京 seo 价格
  • wordpress商品展示插件泰安网络优化
  • 中国建设银行官网站金银纪念币什么平台可以打广告做宣传
  • 湖南移动网站建设公司免费网站搭建
  • 广东网页设计培训徐州seo推广
  • 山东华邦建设集团网站手机网站开发技术pdf
  • 网站留言板html模板腾讯公司网页
  • 博创网站建设团队新闻类网站的设计
  • 网站广告的优势十大营销手段