Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 子查询到LINQ查询的带有not in子句的Sql查询_C#_Entity Framework_Linq_Sql To Linq Conversion - Fatal编程技术网

C# 子查询到LINQ查询的带有not in子句的Sql查询

C# 子查询到LINQ查询的带有not in子句的Sql查询,c#,entity-framework,linq,sql-to-linq-conversion,C#,Entity Framework,Linq,Sql To Linq Conversion,大家好,我是实体框架的新手。 我试图将此查询转换为LINQ查询,但无法理解如何使用not in子句编写子查询。 还有,哪一个应该更好地加入或包括?像这样的事情可能: select * from user_user_connection where userid_from = 3464 and userid_to not in (select userid_from from user_user_connection where userid_to = 3464); 可能会有所改进

大家好,我是实体框架的新手。 我试图将此查询转换为LINQ查询,但无法理解如何使用not in子句编写子查询。
还有,哪一个应该更好地加入或包括?

像这样的事情可能:

   select * from user_user_connection 
where userid_from = 3464 and 
userid_to not in
(select userid_from from 
user_user_connection 
where userid_to = 3464);

可能会有所改进,因为Contains需要相当长的时间(可能会将列表放入哈希集中?

类似的事情可能会:

   select * from user_user_connection 
where userid_from = 3464 and 
userid_to not in
(select userid_from from 
user_user_connection 
where userid_to = 3464);
可能会有所改进,因为包含需要相当长的时间(可能会将列表放入哈希集中?

这应该可以:

var查询=
从ctx.user\U user\U连接中的uc
其中uc.userid_from=3464&&
!(来自ctx.user\U user\U连接中的uc2
其中uc2.userid_to=3464
选择uc2.userid\u from).Contains(uc.userid\u to)
选择uc;
或通过
存在

var查询=
从ctx.user\U user\U连接中的uc
其中uc.userid_from=3464&&
!(来自ctx.user\U user\U连接中的uc2
其中uc2.userid\u to=3464&&uc.userid\u to==uc2.userid\u from
选择uc2.Any()
选择uc;
Ov通过左连接

var查询=
从ctx.user\U user\U连接中的uc
从ctx.user\U user\U连接中的uc2
.Where(uc2=>uc2.userid\u from==3464&&uc.userid\u to==uc2.userid\u from)
.DefaultIfEmpty()
其中uc.userid_from=3464&&uc2==null
选择uc;
这应该可以:

var查询=
从ctx.user\U user\U连接中的uc
其中uc.userid_from=3464&&
!(来自ctx.user\U user\U连接中的uc2
其中uc2.userid_to=3464
选择uc2.userid\u from).Contains(uc.userid\u to)
选择uc;
或通过
存在

var查询=
从ctx.user\U user\U连接中的uc
其中uc.userid_from=3464&&
!(来自ctx.user\U user\U连接中的uc2
其中uc2.userid\u to=3464&&uc.userid\u to==uc2.userid\u from
选择uc2.Any()
选择uc;
Ov通过左连接

var查询=
从ctx.user\U user\U连接中的uc
从ctx.user\U user\U连接中的uc2
.Where(uc2=>uc2.userid\u from==3464&&uc.userid\u to==uc2.userid\u from)
.DefaultIfEmpty()
其中uc.userid_from=3464&&uc2==null
选择uc;
这个

类似于

    from a in user_user_connection 
    join b in user_user_connection on 
        new {From=a.userid_to, To=a.userid_from} equals new {From=b.userid_from, To=b.userid_to} into c
    from d in c.DefaultIfEmpty()
    where d == null
    select a;
这应该与您的not in查询相匹配

如果您想从
中获得一个特定的
用户ID\u,可以在其中添加另一个

select a.*
from user_user_connection a
left join user_user_connection b on a.userid_to = b.userid_from and a.userid_from = b.userid_to
where b.userid_from is null
这个

类似于

    from a in user_user_connection 
    join b in user_user_connection on 
        new {From=a.userid_to, To=a.userid_from} equals new {From=b.userid_from, To=b.userid_to} into c
    from d in c.DefaultIfEmpty()
    where d == null
    select a;
这应该与您的not in查询相匹配

如果您想从
中获得一个特定的
用户ID\u,可以在其中添加另一个

select a.*
from user_user_connection a
left join user_user_connection b on a.userid_to = b.userid_from and a.userid_from = b.userid_to
where b.userid_from is null

谢谢@JamieD77谢谢@JamieD77