8

I have two lists as follows

 var query1 = from enrollments in db.Enrollments
             where enrollments.studentID == studentID && enrollments.result >= 50 && enrollments.enrolled == false
             select enrollments.subjectID;
 var query2 = from prerequisites in db.Prerequisites
              where prerequisites.subjectID == subjectID
              select prerequisites.prerequisiteID;

Now I want to make sure that all the numbers in query2 exist in query1. In other words, I want to ensure that query2 is a part of query1

Any ideas?

P.S

-You can be sure that subjectID and prerequisiteID are the same thing

-I can convert query1 and query2 to lists like that query.ToList()

Dariusz Woźniak
  • 8,677
  • 5
  • 52
  • 70
RonaDona
  • 860
  • 5
  • 13
  • 29

3 Answers3

19
bool results =  query2.All(i=>query1.Contains(i));

related questions below :

Determine if a sequence contains all elements of another sequence using Linq

Check whether an array is a subset of another

Community
  • 1
  • 1
Damith
  • 60,955
  • 13
  • 99
  • 152
7

You can simply check to see that the set difference between query2 and query1 is the empty set:

var isSubset = !query2.Except(query1).Any();

See the LINQ methods Enumerable.Except and Enumerable.Any.

Jon
  • 413,451
  • 75
  • 717
  • 787
3

Have you looked at using Intersect (http://msdn.microsoft.com/en-us/library/bb460136.aspx) Given two IEnumerables it will return a list of any values that exist in both.

var presentInBoth = query1.Intersect(query2)

You may well need to call .ToList() query1 and query2 to make them IEnumerable

rh072005
  • 720
  • 9
  • 15