c# - 复杂的 Linq 查询更新为 DateTime
问题描述
有相互关联的 A 和 B 表。我想创建一个 linq 查询,如果 B 表中 AID 列的整行关系线等于或小于 Date 字段中的今天日期,则该查询将更新 A 表中的 Status 值。
例如,根据下表,表 A 中 ID 值为 1(AAA)和 2(BBB)的行的 Status 值为 1。其 Status 值不会因为 ID 值为 3(CCC)的行而改变不小于 B 表中所有相关行的当前日期。
如何编写最稳定和性能最好的 linq 查询?
今天:2018-7-10 一张桌子 ID名称状态 1 AAA 0 2 血脑屏障 0 3 CCC 0 B表 身份证件日期 6 1 2018-5-3 7 2 2018-6-2 8 2 2018-6-4 9 3 2018-10-12 10 3 2018-7-7
解决方案
- 根据 AID 对 TableB 进行分组
- 在每个组中选择“最大”日期。(每个唯一的 AID)
- 将所选日期与表 A 中的相应 Id 进行比较。
如果日期小于或等于当前日期,则将 Status 值设置为 true。
TableB.GroupBy(x => x.AId).Select(group => new { identifier = group.Key, MaxDate = group.Max(m => m.Date) }).ToList().ForEach(y => { if (y.MaxDate <= DateTime.Now.Date) { TableA.Where(g => g.Id == y.identifier).First().Status = true; } });
推荐阅读
- litedb - 在 LiteDB 中使用多个条件进行搜索:组合查询
- java - 页面上的 NullPointerException
- javascript - parseInt() 函数不工作
- cloudflare - Cloudflare 刷新资源
- node.js - 从节点启动 typescript tsc 编译器
- elasticsearch - 我如何知道我在 elasticsearch.yml 配置文件中的更改是否反映了?我已将 script.inline 和 script.indexed 切换为 true
- php - Woocommerce 中的 Ajaxify 标题购物车项目计数
- python - 非常基本的 Moviepy 脚本无法运行
- azure - Office 365 身份验证:与 Azure 的关系?
- c++ - c++ rgb到hsv的转换