7

我有两个列表如下

 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;

现在我要确保 query2 中的所有数字都存在于 query1 中。换句话说,我想确保 query2 是 query1 的一部分

有任何想法吗?

附言

- 你可以确定subjectIDprerequisiteID是一回事

-我可以将 query1 和 query2 转换为这样的列表query.ToList()

4

3 回答 3

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

以下相关问题:

使用 Linq 确定一个序列是否包含另一个序列的所有元素

检查一个数组是否是另一个数组的子集

于 2013-05-28T10:11:53.543 回答
7

query2您可以简单地检查和之间的集合差异query1是空集:

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

请参阅 LINQ 方法Enumerable.ExceptEnumerable.Any.

于 2013-05-28T10:10:23.823 回答
3

您是否看过使用 Intersect ( http://msdn.microsoft.com/en-us/library/bb460136.aspx ) 给定两个 IEnumerables,它将返回两者中存在的任何值的列表。

var presentInBoth = query1.Intersect(query2)

您可能需要调用 .ToList() query1 和 query2 以使它们 IEnumerable

于 2013-05-28T10:42:04.823 回答