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
是根据 属性 值进行比较的。
我必须在两个列表中找到巧合,一个是特定实体,另一个是元组
实体很简单,像这样:
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
是根据 属性 值进行比较的。