我有以下方法签名:
internal static int[] GetStudentIDsThatAreNotLinked(PrimaryKeyDataV1[]
existingStudents, IQueryable<Student> linkedStudents)
Run Code Online (Sandbox Code Playgroud)
PrimaryKeyData是一个具有ServerID和LocalID整数作为属性的类.Student是一个类(在其他属性中)有一个名为StudentID的整数.
在英语中,我想要做的是返回一个整数数组,这些整数位于existingStudents [...].ServerID但不在linkedStudents [...]中.-- StudentID
如果'existingStudents'和'linkedStudents'都是整数数组,我会使用如下的linq查询:
return from es in existingStudents where
!linkedStudents.Contains<int>(es) select es;
Run Code Online (Sandbox Code Playgroud)
..然后可以转换为一个整数数组.
我想要做的是给包含一个IEqualityOperator,如果PrimaryKeyData.ServerID == Student.StudentID,它将认为PrimaryKeyData类等于Student类
所以我认为我需要一个lambda表达式,但我对如何构造它非常困惑.
我想我正朝着正确的方向前进,但任何人都可以在最后的障碍中帮助我吗?
所以,我的理解是你想获得PrimaryKeyDataV1的所有实例,其中ServerID属性不存在于linkedStudents参数的任何student.StudentID属性中?
internal static PrimaryKeyDataV1[] GetStudentsThatAreNotLinked(PrimaryKeyDataV1[] existingStudents, IQueryable<Student> linkedStudents)
{
var results = existingStudents.Select(s => s.ServerID)
.Except(linkedStudents.Select(link => link.StudentID))
.ToArray();
return existingStudents.Where(stud => results.Contains(stud.ServerID));
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想要一系列ID ...
internal static int[] GetStudentIDsThatAreNotLinked(PrimaryKeyDataV1[] existingStudents, IQueryable<Student> linkedStudents)
{
return existingStudents.Select(s => s.ServerID)
.Except(linkedStudents.Select(link => link.StudentID))
.ToArray();
}
Run Code Online (Sandbox Code Playgroud)