我是 LINQ 的新手。我很困惑查询它。请任何人告诉我如何在 LINQ 中转换以下查询
select * from tbldev
where iddevice not in(select a.iddevice from
tblUDMap a join tbldev d
on a.iddevice=d.iddevice )
我是 LINQ 的新手。我很困惑查询它。请任何人告诉我如何在 LINQ 中转换以下查询
select * from tbldev
where iddevice not in(select a.iddevice from
tblUDMap a join tbldev d
on a.iddevice=d.iddevice )
这里不需要嵌套查询:
from x in tbldev
join y in tblUDMap
on x.iddevice equals y.iddevice
into grp
where !grp.Any()
select x
这将选择tbldev
其中没有相应记录的所有记录tblUDMap
。
一个字面和幼稚的词对词翻译将是这样的:
var result = from dev in context.tbldev
where (from udmap in context.tblUDMap join dev2 in context.tbldev on udmap.iddevice equals dev2.iddevice select udmap.iddevice)
.Contains(dev.iddevice) == false
select dev.iddevice;
但是你的问题很奇怪!您将这两个表连接起来,然后过滤掉那些tbldev
成功参与连接的行!这意味着您想要那些tbldev
不能与 tblUDMap 连接的行。所以写这个更简单:
var result = from dev in context.tbldev
where (from udmap in context.tblUDMap
where udmap.iddevice == dev.iddevice
).Count() == 0
select dev.iddevice;
您可以将查询简化为这样的
var query = tbldev.Where(e => !tblUDMap.Any(a => a.iddevice == e.iddevice))
尝试这个:
from res in tbldev
where !(from a in tblUDMap
join b in tbldev on a.Iddevice equals b.iddvice
into c
select c)
select res
重要的部分是否定的 -where
子句。从我的脑海中,这里的连接语法可能不正确。