Sql server 正在查找Linq查询
我正在搜索一个LINQ查询,它构建一个绑定到DataGrid的表。根据我稍后将解释的情况,它应该排除/省略行。 现在我有三个SQL Server表,“tblOrder”、“tblOrderState”和“tblListOrderState” “tblOrder”中的列:Sql server 正在查找Linq查询,sql-server,entity-framework,linq,Sql Server,Entity Framework,Linq,我正在搜索一个LINQ查询,它构建一个绑定到DataGrid的表。根据我稍后将解释的情况,它应该排除/省略行。 现在我有三个SQL Server表,“tblOrder”、“tblOrderState”和“tblListOrderState” “tblOrder”中的列: 身份证 订单号 “tblOrderState”中的列: 身份证 StateID(tblistorderState.Id的外键) OrderID(tblOrder.ID的外键) DateMain(此行的日期时间) “tbl
- 身份证
- 订单号
- 身份证
- StateID(tblistorderState.Id的外键)
- OrderID(tblOrder.ID的外键)
- DateMain(此行的日期时间)
- 身份证
- 州名
- 订单号
- 州名
- 日尔曼
- 也许还有StateID
- ID=59
- 订单号=21-1111
- ID=60
- 订单号=21-2222
- ID=61
- 订单号=21-3333
- Id=117
- StateID=5
- OrderID=59
- DateMain=2021-02-02(yyyy-mm-dd)
- Id=118
- StateID=5
- OrderID=60
- DateMain=2021-01-12
- Id=119
- StateID=5
- OrderID=61
- DateMain=2021-02-02
- Id=120
- StateID=6
- OrderID=61
- DateMain=2021-03-30
- Id=121
- StateID=5
- OrderID=61
- DateMain=2021-01-06
- Id=5
- StateName=“正在等待处理”
- 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记录时,它会忽略处于“进程完成”状态的记录。但重要的是:如果有一条记录“processfinished”和一条记录“waiting to process”具有更多的recend DateMain值,那么它应该显示在结果表中。可以说,该表应该只包含等待处理的条目,这样在上面的示例中,OrderNumber为“21-3333”的条目就不会显示
更新:
以下是DotNETfiddle.net上的示例:
如果无法使用查询执行此操作,那么一个好的解决方法可能是编写一个函数,随后使用myList删除行。删除(…)现在找到了一个解决方案:
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.OrderID.Equals(KGB.Where(tz => tz.StateID.Equals(6)).FirstOrDefault() == null ? -2 : KGB.Where(tz => tz.StateID.Equals(6)).FirstOrDefault().OrderID)
orderby TAS.DateMain descending
select new { KTL.OrderNumber, KRA.StateName, TAS.DateMain, TAS.StateID };
它不包括5仍然可以按时间顺序排在6之后的情况,但已经足够了。请使用创建一个请不要使用图像来显示代码、数据或错误。使用格式化文本。@Dale我不得不重写它好几次,因为stackoverflow说“你的文章似乎包含的代码没有正确格式化为代码”,但现在它变成了文本。