c# 将列表 <Tuple> 与实体列表相交

c# Intersect a List<Tuple> with List of entities

我必须在两个列表中找到巧合,一个是特定实体,另一个是元组

实体很简单,像这样:

public class SUBJECT
{
    int id;
    int group;
}

巧合必须与 SUBJECT 实体的两个属性,以及元组的两个值,需要 SUBJECT.group 的列表,我写了这段代码,但我猜有更好的这样做的方式。

List<SUBJECT> subjects;
List<Tuple<int, int>> groups;
List<int> intersected = new List<int>();
foreach (Tuple<int, int> g in groups)
{
    List<int> found = subjects
                    .Where(x => x.id == item.Item1 && x.group == item.Item2)
                    .Select(x => x.group).ToList();
    if (found != null && found.Any())
        intersected.AddRange(found);
}
return intersected;

谢谢

首先我会将主题转换为 Tuples,然后使用 Intersect:

var intersected = subjects
                  .Select(x => Tuple.Create(x.id, x.group))
                  .Intersect(groups)
                  .Select(x => x.group)
                  .ToList();

这会起作用,因为 Tuples 是根据 属性 值进行比较的。