如何根据 Int 列表获取精确匹配列表对象?



我想完全匹配 基于int列表的对象列表
我有两个列表,第一个
List<int> list1 = new List<int>(){5,6};- 假设这些是大学ID
第二个我有对象列表,例如

List<UniversityGroup> list2 = new List<UniversityGroup>();new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 5 });对象匹配 o/p 应该'1'
new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 6 });
---------------------------------------------------------------------------------------------
new UniversityGroup ({UniversityGroupId = 2 ,UniversityId = 5 });--忽略,因为它只包含"5
---------------------------------------------------------------------------------------------
new UniversityGroup ({UniversityGroupId = 3 ,UniversityId = 2 });--忽略的元素与new UniversityGroup ({UniversityGroupId = 3 ,UniversityId = 3 });
不匹配

并希望输出为大学组 ID,其中列表 1 中的 id 将与列表 2 中的大学 ID匹配,

预期输出:=>[1]
new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 5 });new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 6 });

我尝试使用foreach但是,我认为它不是一个优化的解决方案,所以寻找速记或优化的linq查询。

如果我的问题陈述正确,您也许可以在查询中利用SequenceEqual

var list1 = new List<int> { 5, 6 };
var list2 = new List<UniversityGroup> {
new UniversityGroup{ UniversityGroupId = 1 ,UniversityId = 6 },
new UniversityGroup{ UniversityGroupId = 1, UniversityId = 5 },
new UniversityGroup{ UniversityGroupId = 2, UniversityId = 5 },
new UniversityGroup{ UniversityGroupId = 3, UniversityId = 2 },
new UniversityGroup{ UniversityGroupId = 3, UniversityId = 3 }
};
list1.Sort(); // depending on your input data you might want to apply some ordering so you could match sequences 6,5 to 5,6
var result = list2.GroupBy(g => g.UniversityGroupId)
.Where(g => g.Select(i => i.UniversityId)
.OrderBy(x => x) // this might be optional if you can guarantee source sequence order
.SequenceEqual(list1)) // here's the thing
//.Select(g => g.Key) // if you want just UniversityGroupId
;

然而,很难说这个查询是否会比你的几个foreach循环更好,而不抓住这些。

最新更新