Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 正在查找Linq查询_Sql Server_Entity Framework_Linq - Fatal编程技术网

Sql server 正在查找Linq查询

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

我正在搜索一个LINQ查询,它构建一个绑定到DataGrid的表。根据我稍后将解释的情况,它应该排除/省略行。 现在我有三个SQL Server表,“tblOrder”、“tblOrderState”和“tblListOrderState”

“tblOrder”中的列:

  • 身份证
  • 订单号
“tblOrderState”中的列:

  • 身份证
  • StateID(tblistorderState.Id的外键)
  • OrderID(tblOrder.ID的外键)
  • DateMain(此行的日期时间)
“tbllisterderState”中的列

  • 身份证
  • 州名
最终查询的表应具有以下列:

  • 订单号
  • 州名
  • 日尔曼
  • 也许还有StateID
例如,“tblOrder”中的这三条记录:

  • 记录1:
    • ID=59
    • 订单号=21-1111
  • 记录2:
    • ID=60
    • 订单号=21-2222
  • 记录3:
    • ID=61
    • 订单号=21-3333
    这五条记录在“tblOrderState”中:

  • 记录1:
    • Id=117
    • StateID=5
    • OrderID=59
    • DateMain=2021-02-02(yyyy-mm-dd)
  • 记录2:
    • Id=118
    • StateID=5
    • OrderID=60
    • DateMain=2021-01-12
  • 记录3:
    • Id=119
    • StateID=5
    • OrderID=61
    • DateMain=2021-02-02
  • 记录4:
    • Id=120
    • StateID=6
    • OrderID=61
    • DateMain=2021-03-30
  • 记录5:
    • Id=121
    • StateID=5
    • OrderID=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记录时,它会忽略处于“进程完成”状态的记录。但重要的是:如果有一条记录“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说“你的文章似乎包含的代码没有正确格式化为代码”,但现在它变成了文本。