преобразовать sql-запрос в linq в метод сущностей

1

У меня есть этот запрос на сервере 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 State

состояние поля может иметь 3 состояния (1-Insert, 2-Remove, 3-Substitute). Поэтому я могу это сделать:

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, я хочу получить аппаратное обеспечение с аппаратными идентификаторами 1 и 2.

IDProcessHardware  IDProcess  IDHardware State

  1                  10          1        1

  2                  10          2        1

  3                  10          1        2

  4                  20          1        1

в приведенной выше таблице, давая IDProcess 10, он должен дать мне идентификаторы аппаратного обеспечения 2.

Заранее спасибо...

Теги:
linq

1 ответ

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
                           });

он все равно нуждается в информации, описывающей аппаратное обеспечение, например, серийный номер или описание. я выложу здесь полный запрос..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню