简体   繁体   English

需要为LINQ创建此查询

[英]need create this query to LINQ

Good night, 晚安,

I am having a great difficulty to convert this query in LINQ, if you can help me 如果你能帮助我,我很难在LINQ中转换这个查询

thank you 谢谢

SELECT  DISTINCT STA.ID_OBRA, 
        STA.ID_AREA, 
        STA.ID_FLUXO 
FROM        TB_WF_STATUS_APROVACAO STA  
WHERE   STA.ID_OBRA NOT IN (  
            SELECT  ID_OBRA 
            FROM    TB_WF_STATUS_APROVACAO STA 
            WHERE   STA.SEQUENCIA = (   SELECT  MAX(SEQUENCIA) 
                                        FROM    TB_WF_STATUS_APROVACAO 
                                        WHERE   ID_FLUXO = STA.ID_FLUXO) 
                                            OR  STA.APROVADO <> 1 
                                        GROUP BY ID_OBRA)

I am using Entity Framework, and I have tried this: 我正在使用Entity Framework,我试过这个:

var q = (from a in db.pendenteAprovacao.Where(a => !aprovacaoList .SelectMany(b => b.id_obra);

Here's a near-1-to-1 translation (untested): 这是一个接近1对1的翻译(未经测试):

var query =
    (from sta1 in db.TB_WF_STATUS_APROVACAO
    let subQuery =
        from sta2 in db.TB_WF_STATUS_APROVACAO
        let maxSequencia =
            (from sta3 in db.TB_WF_STATUS_APROVACAO
            where sta3.ID_FLUXO == sta2.ID_FLUXO
            select sta3.SEQUENCIA).Max()
        where sta2.SEQUENCIA == maxSequencia || sta2.APROVADO != 1
        group sta2 by sta2.ID_OBRA into g
        select g.Key
    where !subQuery.Contains(sta1.ID_OBRA)
    select new
    {
        sta1.ID_OBRA,
        sta1.ID_AREA,
        sta1.ID_FLUXO,
    }).Distinct();

reply: 回复:

        var q = (from STA in aprovacaoList
                 where
                   !
                     (from STA0 in aprovacaoList
                      where
                        STA0.sequencia ==
                          (from TB_WF_STATUS_APROVACAO in aprovacaoList
                           where
                             TB_WF_STATUS_APROVACAO.id_fluxo == STA0.id_fluxo
                           select new
                           {
                               TB_WF_STATUS_APROVACAO.sequencia
                           }).Max(p => p.sequencia) ||
                        STA0.aprovado != true
                      group STA0 by new
                      {
                          STA0.id_obra
                      } into g
                      select new
                      {
                          Id_obra = (Int32?)g.Key.id_obra
                      }).Contains(new { Id_obra = (Int32?)STA.id_obra })
                 select new
                 {
                     STA.id_obra,
                     STA.id_area,
                     STA.id_fluxo
                 }).Distinct();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM