如何在LINQ中使用'NOT IN'功能?

时间:2014-05-13 14:20:40

标签: c# linq

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'函数的最佳方法

4 个答案:

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

怎么样?