【发布时间】:2021-07-02 15:09:05
【问题描述】:
我正在搜索一个 LINQ-Query,它构建一个绑定到 DataGrid 的表。根据我稍后解释的情况,它应该排除/省略行。 现在我有了三个 SQL Server 表,“tblOrder”、“tblOrderState”和“tblListOrderState”。
“tblOrder”中的列:
- 身份证
- 订单号
“tblOrderState”中的列:
- 身份证
- StateID(tblListOrderState.Id 的外键)
- OrderID(tblOrder.ID 的外键)
- DateMain(此行的日期时间)
“tblListOrderState”中的列
- 身份证
- 州名
最终查询的表应该有这些列:
- 订单号
- 州名
- 日期主要
- 也许还有 StateID
现在以“tblOrder”中的这三个记录为例:
- 记录 1:
- ID = 59
- 订单号 = 21-1111
- 记录 2:
- ID = 60
- 订单号 = 21-2222
- 记录 3:
- ID = 61
- 订单号 = 21-3333
以及“tblOrderState”中的这五条记录:
- 记录 1:
- ID = 117
- StateID = 5
- 订单 ID = 59
- DateMain = 2021-02-02 (yyyy-mm-dd)
- 记录 2:
- ID = 118
- StateID = 5
- 订单 ID = 60
- DateMain = 2021-01-12
- 记录 3:
- ID = 119
- StateID = 5
- 订单 ID = 61
- DateMain = 2021-02-02
- 记录 4:
- ID = 120
- StateID = 6
- 订单 ID = 61
- DateMain = 2021-03-30
- 记录 5:
- ID = 121
- StateID = 5
- 订单 ID = 61
- DateMain = 2021-01-06
而这两条记录在“tblListOrderState”中:
- 记录 1:
- ID = 5
- StateName = "等待处理"
- 记录 2:
- ID = 6
- StateName = "进程完成"
我写了这个查询:
var FQuery = from KTL in ctxt.tblOrders
join TBR in ctxt.tblOrderStates on KTL.ID equals TBR.OrderID into KGB
from TAS in KGB.DefaultIfEmpty()
join KRA in ctxt.tblListOrderStates on TAS.StateID equals KRA.Id
where TAS.StateID.Equals(5) || TAS.StateID.Equals(6)
orderby TAS.DateMain descending
select new { KTL.OrderNumber, KRA.StateName, TAS.DateMain, TAS.StateID };
基于此,它给了我这个结果:
OrderNumber StateName DateMain StateID
21-3333 process finished 2021-03-30 6
21-3333 waiting to process 2021-02-02 5
21-1111 waiting to process 2021-02-02 5
21-2222 waiting to process 2021-01-12 5
21-3333 waiting to process 2021-01-06 5
我的愿望只是有一个查询,当它存在具有最新 DateMain 值的 tblOrderState-Record 时,它会忽略处于“进程完成”状态的记录。但重要的是:如果有一条记录“处理完成”和一条记录“等待处理”具有更多最近的 DateMain-value,那么它应该显示在结果表中。可以说,该表应该只包含等待处理的条目,因此在上面的示例中,OrderNumber 为“21-3333”的条目根本不会出现。
更新: 这是 DotNETfiddle.net 上的示例: https://dotnetfiddle.net/clx9iG
如果无法通过查询来执行此操作,也许一个好的解决方法是编写一个函数,该函数随后使用 myList.Remove(...) 删除行。
【问题讨论】:
-
请不要将图像用于代码、数据或错误。使用格式化文本。
-
@Dale 我不得不重写几次,因为 stackoverflow 说“您的帖子似乎包含未正确格式化为代码的代码”,但现在它变成了文本。
标签: sql-server entity-framework linq