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));