1

我是 LINQ 的新手。我很困惑查询它。请任何人告诉我如何在 LINQ 中转换以下查询

select * from tbldev 
where iddevice not in(select a.iddevice from 
tblUDMap a join tbldev d 
on a.iddevice=d.iddevice )
4

4 回答 4

2

这里不需要嵌套查询:

from x in tbldev
join y in tblUDMap
    on x.iddevice equals y.iddevice
    into grp
where !grp.Any()
select x

这将选择tbldev其中没有相应记录的所有记录tblUDMap

于 2013-09-24T14:00:22.853 回答
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;
于 2013-09-24T13:45:42.393 回答
2

您可以将查询简化为这样的

var query = tbldev.Where(e => !tblUDMap.Any(a => a.iddevice == e.iddevice))
于 2013-09-24T14:32:00.090 回答
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子句。从我的脑海中,这里的连接语法可能不正确。

于 2013-09-24T13:19:17.927 回答