首页 > 解决方案 > 复杂的 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

标签: c#linq

解决方案


  1. 根据 AID 对 TableB 进行分组
  2. 在每个组中选择“最大”日期。(每个唯一的 AID)
  3. 将所选日期与表 A 中的相应 Id 进行比较。
  4. 如果日期小于或等于当前日期,则将 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;
            }
        });
    

推荐阅读