我是LINQ的新手。我很困惑地查询它。请任何人告诉我如何在LINQ中转换以下查询
select * from tbldev
where iddevice not in(select a.iddevice from
tblUDMap a join tbldev d
on a.iddevice=d.iddevice )
答案 0 :(得分:2)
一个文字和天真的单词到单词翻译将是这样的:
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;
答案 1 :(得分:2)
这里不需要嵌套查询:
from x in tbldev
join y in tblUDMap
on x.iddevice equals y.iddevice
into grp
where !grp.Any()
select x
这将从tbldev
中选择tblUDMap
中没有相应记录的所有记录。
答案 2 :(得分:2)
您可以将查询简化为此类
var query = tbldev.Where(e => !tblUDMap.Any(a => a.iddevice == e.iddevice))
答案 3 :(得分:1)
试试这个:
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
- 条款。从头到尾,这里的连接语法可能不正确。