LINQ中带连接的子查询

LINQ中带连接的子查询,linq,Linq,我是LINQ的新手。我不知道该怎么问。请任何人告诉我如何在LINQ中转换下面的查询 select * from tbldev where iddevice not in(select a.iddevice from tblUDMap a join tbldev d on a.iddevice=d.iddevice ) 试试这个: from res in tbldev where !(from a in tblUDMap join b in tbldev on a.Idde

我是LINQ的新手。我不知道该怎么问。请任何人告诉我如何在LINQ中转换下面的查询

select * from tbldev 
where iddevice not in(select a.iddevice from 
tblUDMap a join tbldev d 
on a.iddevice=d.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
-子句。从我的角度来看,这里的连接语法可能不正确。

试试这个:

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
-子句。从我的角度来看,这里的连接语法可能是不正确的。

一个简单的逐字翻译应该是这样的:

    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
中成功参与join的行!这意味着您需要
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 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
中成功参与join的行!这意味着您需要
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;

此处不需要嵌套查询:

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

这将从
tbldev
中选择所有在
tblUDMap
中没有相应记录的记录。此处不需要嵌套查询:

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

这将从
tbldev
中选择所有在
tblUDMap
中没有相应记录的记录。您可以将查询简化为以下内容

var query = tbldev.Where(e => !tblUDMap.Any(a => a.iddevice == e.iddevice))

您可以将查询简化为以下内容

var query = tbldev.Where(e => !tblUDMap.Any(a => a.iddevice == e.iddevice))

@卡琳:对不起!更正错误。@Kalyan抱歉!纠正了错误。