【问题标题】:convert an sql query into linq to entities method based将 sql 查询转换为基于 linq 的实体方法
【发布时间】:2014-05-21 16:34:56
【问题描述】:

我在 sql server 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
                       });

我有这个表,它将表硬件与表进程相关联。这个表称为进程硬件。此表由以下内容描述:IDProcessHardware IDProcess IDHardware State

字段状态可以有 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。

提前谢谢...

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    经过大量的反复试验和大量搜索,我找到了这个链接 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
                               });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多