Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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中的函数?_C#_Linq - Fatal编程技术网

C# 如何使用';不在';LINQ中的函数?

C# 如何使用';不在';LINQ中的函数?,c#,linq,C#,Linq,我正试图从query1中的数据库返回所有用户,除了上述query2中的所有用户 我怎样才能做到这一点?我尝试使用returningquery1添加。除了(query2)最后,但我不确定哪种方法是在LINQ中实现“not in”函数的最佳方法,第二个查询看起来就是错误的。试试这个: var query2 = (from tc in Entities.TutorCourses join c in Entities

我正试图从
query1
中的数据库返回所有
用户
,除了上述
query2
中的所有
用户


我怎样才能做到这一点?我尝试使用returning
query1
添加
。除了(query2)最后,但我不确定哪种方法是在LINQ中实现“not in”函数的最佳方法,第二个查询看起来就是错误的。试试这个:

var query2 = (from tc in Entities.TutorCourses
                      join c
                      in Entities.Course
                      on tc.CourseId equals c.Id
                      where tc.CourseId == id
                      select tc.Username).ToList();

var query1 = Entities.User
    .Select(u => u.Role
        .Select(p => p.Name)
        .Contains("Tutor"));

如果所有查询都是同一类型,请尝试使用此方法

var query2 = (from tc in Entities.TutorCourses
                      join c
                      in Entities.Course
                      on tc.CourseId equals c.Id
                      where tc.CourseId == id
                      select tc.Username).ToList();

var query1 = Entities.User
    .Where(u => 
        query1.Any(un => un != u.Username) &&
        u.Role.Name.Contains("Tutor"))
    .Select(u => u.Role);

您可以使用
Any
查找两个列表之间的匹配项,然后添加
指定您想要的是不匹配的。以下是一个适合您的示例:

Intersect

怎么样
query1.Where(c=>!query2.Contains(c))

您的
查询1
true
false
作为值,我想您需要
在哪里
然后
选择
,您的问题有点不清楚
query2
正在返回字符串列表(什么是用户名?这些名称是否与
用户
实体相关?)<代码>查询1
用户
对象的列表。您希望过滤器如何工作?不清楚,但可以推断。看看我的答案@drewh您可以添加一个
的例子,其中在这里:或者
query2.All(y=>y.Id!=x.Id)
-这显然是等效的,但对我来说更自然(“所有都不同”应该是“不一样”)@KonradMorawski在Linq2SQL中至少这两个不会生成相同的SQL(尽管它们给出相同的结果)<代码>!query2.Any(y=>y.Id==x.Id)
会更好。@Magnus哦,我不知道,我主要使用LINQ来处理对象。谢谢你的澄清
var excludedList = query1.Where(x => !query2.Any(y => y.Id == x.Id));