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"));
我正在尝试从Users
中的所有query1
数据库中返回Users
以外的所有query2
。
我怎样才能做到这一点?我最后通过添加query1
尝试使用返回.Except(query2);
,但我不确定哪种方法是在LINQ中实现'NOT IN'函数的最佳方法
答案 0 :(得分:0)
第二个查询看起来错了。试试这个:
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);
答案 1 :(得分:0)
如果所有查询都是相同类型,请尝试使用此方法
Intersect
答案 2 :(得分:0)
您可以使用Any
查找两个列表之间的匹配项,然后添加!
以指定您希望不匹配的列表。这是一个适合你的例子:
var excludedList = query1.Where(x => !query2.Any(y => y.Id == x.Id));
答案 3 :(得分:0)
query1.Where(c=> !query2.Contains(c));