2014-05-21 123 views
1

我有此查询的SQL Server服务器做我想做的实体法.. 我怎样才能将其转换为LINQ转换SQL查询到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 
         }); 

我有此表与表过程..这台被称为processHardware涉及的表硬件。这个表由discribed: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但未从进程中删除的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

在此先感谢...

回答

0

大量的试验和错误之后,很多的搜索,我发现这个链接 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 
          }); 

它仍然需要休息的信息discribing一样的序列号,或者描述硬件。 我会在这里发表完整的查询..