我有这个表将表硬件与表Process相关联。 这个表叫做processHardware。 该表描述如下: IDProcessHardware IDProcess IDHardware 状态
场状态可以有3种状态(1-Insert,2-Remove,3-Substitute).. 所以我可以拥有这个:
IDProcessoHardware IDProcesso IDHardware State
1 10 1 1
2 10 2 1
3 10 1 2
这告诉我的是id为1的硬件是在id为10的进程上插入的 然后用户在id为10的进程中插入id为2的硬件,并从id为10的进程中删除id为1的硬件
通过给出进程的id我想获得插入的硬件的id,这就是被删除的硬件的id。 所以在这种情况下,我将得到的记录是记录号2 ..因为是插入,但没有删除.. 从这个表中获取ID之后我需要将id与表硬件联系起来,这个表由idhardware,序列号,描述来描述..
我正在使用linq方法基础..
这是我做过的事情,但在此之后没有进一步......
var ProcessoHardware = from procHardware in db.ProcessoHardwares
where procHardware.Rem == 0 && procHardware.IDProcesso == IDProcesso
group procHardware by procHardware.IDHardware into g
select new { IDHardware = g.Key, count = g.Count() };
上面的查询对我没有用... 所以我想得到只在表上出现一次的记录,然后将从这个查询中获得的id关联起来,并获取有关这些id的信息,如序列号,描述(这些字段在名为Hardware的表上)。
提前感谢..
在sql中我设法进行查询..
SELECT *
FROM
(SELECT IDHardware ,COUNT(IDHardware) nu
FROM dbo.ProcessoHardware
WHERE IDProcesso=47
Group By IDHardware) T WHERE nu=1
如何将此传递给linq?
答案 0 :(得分:1)
首先,如果您使用having clause,那么您的SQL语句会更清晰,因此它变为
SELECT IDHardware, COUNT(IDHardware) nu
FROM dbo.ProcessoHardware
WHERE IDProcesso=47
GROUP BY IDHardware
HAVING COUNT(IDHardware) = 1
其次,您的SQL语句没有提到名为Rem的字段,但您的LINQ状态为where procHardware.Rem == 0
。我假设您需要保留该过滤器。如果是这样,那么您需要做的就是添加一个where子句来计算您的组,g。请尝试以下
var ProcessoHardware = from procHardware in db.ProcessoHardwares
where procHardware.Rem == 0 && procHardware.IDProcesso == IDProcesso
group procHardware by procHardware.IDHardware into g
where g.Count() == 1
select new { IDHardware = g.Key, count = g.Count() };
虽然您的语句(没有Rem和硬编码ID为47)的文字转换为LINQ,但
var ProcessoHardware = from procHardware in db.ProcessoHardwares
where procHardware.IDProcesso == 47
group procHardware by procHardware.IDHardware into g
where g.Count() == 1
select new { IDHardware = g.Key, count = g.Count() };