在LINQ中加入子查询

时间:2013-09-24 13:10:47

标签: linq

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

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

4 个答案:

答案 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 - 条款。从头到尾,这里的连接语法可能不正确。