我有两个列表如下
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的一部分
有什么想法吗?
P.S
- 您可以确定subjectID
和prerequisiteID
是同一件事
- 我可以将query1和query2转换为query.ToList()
答案 0 :(得分:14)
bool results = query2.All(i=>query1.Contains(i));
以下相关问题:
Determine if a sequence contains all elements of another sequence using Linq
答案 1 :(得分:7)
您只需检查query2
和query1
之间的设置差异是否为空集:
var isSubset = !query2.Except(query1).Any();
请参阅LINQ方法Enumerable.Except
和Enumerable.Any
。
答案 2 :(得分:1)
您是否看过使用Intersect(http://msdn.microsoft.com/en-us/library/bb460136.aspx) 给定两个IEnumebles,它将返回两者中存在的任何值的列表。
var presentInBoth = query1.Intersect(query2)
你可能需要调用.ToList()query1和query2来使它们成为IEnumerable