如何使用LINQ过滤多个列表的成员?

时间:2016-10-26 01:33:49

标签: c# arrays linq

我是LINQ的新手,我在这里有点不太了解。我尝试在MSDN上搜索,但没有成功。我觉得可能有一个单行LINQ查询,我无法找到。

基本上,我有一个名为Student的班级和一个名为University的班级。每所大学都有一个Student []阵列。学生可以是多所大学的成员。

我也有一系列大学。我们的工作是构建一个LINQ查询,输出一个在多所大学注册的所有学生的数组。

我可以通过

轻松获得各大学所有不同学生[]数组的联合
University[] universities //initialize
//fill universities with data
Student[] bigListOfStudents = universities.SelectMany(b => b.Students).ToArray();

然后我只需要抓住多次出现在数组中的bigListOfStudents的所有元素。与.Distinct()相反。 Wat do?

编辑:澄清,这里是基本的学生和大学课程。 Jmbag是一个唯一的学生ID,用于比较Equals(Student s)覆盖方法,以及生成哈希码,然后允许LINQ查询。

class Student
{
    public string Name { get; set; }
    public string Jmbag { get; set; }
    public Student(string name, string jmbag)
    {
        Name = name;
        Jmbag = jmbag;
    }
    public enum Gender
    {
        Male, Female
    }

    public static bool operator ==(Student student1, Student student2)
    {
        return student1.Jmbag == student2.Jmbag;
    }

    public static bool operator !=(Student student1, Student student2)
    {
        return student1.Jmbag != student2.Jmbag;
    }

    public override bool Equals(object obj)
    {
        if (GetType() == obj.GetType())
        {
            Student tempStudent = (Student)obj;
            if (Jmbag == tempStudent.Jmbag)
            {
                return true;
            }
        }
        return false;
    }

    public override int GetHashCode()
    {
        int hash = 0;
        foreach(char c in Jmbag)
        {
            hash += c.GetHashCode();
        }
        return hash;
    }
}


class University
{
    public string Name { get; set; }
    public Student[] Students { get; set; }
}

0 个答案:

没有答案