繁体   English   中英

将基于sql的sql查询转换为基于实体的方法

[英]convert an sql query into linq to entities method based

我在做我想要的SQL Server服务器中得到此查询。我如何将其转换为linq

select  t1.IDHardware,h.DescricaoHardware
from dbo.ProcessoHardware t1
INNER JOIN
(select t2.IDHardware, max(t2.IDProcessoHardware) as maxVisit
from dbo.ProcessoHardware t2
group by t2.IDHardware,t2.IDProcesso) v ON
v.maxVisit = t1.IDProcessoHardware JOIN dbo.Hardware h ON t1.IDHardware=h.IDHardware
where t1.Estado=1 AND IDProcesso=1

这就是我现在的位置...但是我无法弄清楚这一点。

var ProcHardware = (from procHardware in db.ProcessoHardwares
                            where procHardware.IDProcesso == IDProcesso
                            select new { procHardware.IDHardware, procHardware.IDProcessoHardware, procHardware.IDProcesso, procHardware.Estado } into x
                            group x by new { x.IDHardware, x.IDProcesso, x.IDProcessoHardware, x.Estado } into t
                            let Max = t.Max(g => g.IDProcessoHardware)
                            select new { IDHardware = t.Key.IDHardware, Estado = t.Key.Estado, t.Key.IDProcesso,IDProcessoHardware=t.Key.IDProcessoHardware,cMax=Max }).ToList().Where(t => t.Estado == 1 && t.IDProcesso == IDProcesso && t.IDProcessoHardware==Max).Select(c => new VMProcessoChooseHardware
                       {
                           IDHardware = c.IDHardware
                       });

我已经有了将该表与表Process关联的表的表。此表称为processHardware。 该表的描述者:IDProcessHardware IDProcess IDHardware状态

该字段状态可以具有3个状态(1-插入,2-删除,3-替换)..所以我可以拥有以下状态:

IDProcessHardware  IDProcess  IDHardware State

  1                  10          1        1

  2                  10          2        1

  3                  10          1        2

  4                  10          1        1

  5                  20          1        1

我要获取的是获取已插入但未从进程中删除的IDHardware。 因此,通过给IDProcess = 10,我想获得具有硬件ID 1和2的硬件。

IDProcessHardware  IDProcess  IDHardware State

  1                  10          1        1

  2                  10          2        1

  3                  10          1        2

  4                  20          1        1

在上表中给IDProcess 10,它应该给我硬件ID 2。

提前致谢...

经过大量的反复试验和大量搜索,我发现此链接http://jetmathew.wordpress.com/2014/01/21/select-latest-record-from-recordset-using-sql-and-linq /

那家伙正在尝试类似于我想要的东西..所以我选择了linq查询并将其转换..

这就是我现在所拥有的

var ProcHardware = (from a in db.ProcessoHardwares
                                group a by new { a.IDHardware, a.IDProcesso } into latest
                                join b in db.ProcessoHardwares on new { dt = latest.Max(itm => itm.IDProcessoHardware) } equals new {  dt = b.IDProcessoHardware }
                                select new { ID = b.IDHardware, Estado=b.Estado,IDProcesso=b.IDProcesso }).ToList().Where(t => t.Estado == 1 && t.IDProcesso == IDProcesso ).Select(c => new VMProcessoChooseHardware
                           {
                               IDHardware = c.ID
                           });

它仍然需要其余的信息来描述硬件,例如序列号或说明。 我将在这里发布完整的查询。

暂无
暂无

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

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