11

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
  • 9,640
  • 6
  • 60
  • 73
RonaDona
  • 912
  • 6
  • 13
  • 30

3 Answers3

24
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
  • 62,401
  • 13
  • 102
  • 153
8

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
  • 428,835
  • 81
  • 738
  • 806
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
  • 6
  • 15