C# 需要创建此查询到LINQ
晚安 如果您能帮助我,我很难在LINQ中转换此查询 多谢各位C# 需要创建此查询到LINQ,c#,linq,entity-framework,C#,Linq,Entity Framework,晚安 如果您能帮助我,我很难在LINQ中转换此查询 多谢各位 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
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)
这里有一个近似1:1的翻译(未经测试): 答复:
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();
是的,我正在使用EF,我尝试了这个,more is not bit right var q=(来自db.pendenteAprovacao.Where(a=>!aprovacaoList.SelectMany(b=>b.id_obra)也许这可以帮助您以只读方式使用它(我怀疑是)?从本质上讲,您不希望对结果实体进行更改并将这些更改保留回来?只需考虑将带有此查询的视图添加到数据库,然后映射到新的查询实体是一个不错的选择。
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();
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();