如何根据共同属性合并3个不同的列表?

时间:2018-01-10 07:55:03

标签: c#

我在MVC Visual Studio上开发了一个程序。我在数据库上有3个不同的表;老师,学生和家长。我使用了实体框架,我创建了这些表的模型.'Joindate'是公共属性,每个表中有1000个人。 我需要在所有表格中找到最新的10人。 我怎么能这样做?

public class teachers
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public int Age { get; set; }

}


public class students
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public string Lesson { get; set; }


}

public class parents
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public string StudentName { get; set; }

    public string Job { get; set; }

}

2 个答案:

答案 0 :(得分:1)

您需要为ordere中的三个类提供一些公共类或接口,以将不同的实例存储到一个列表中。该列表只能有一个类型。

为所有这些定义一个基本接口:

interface IPerson
{
    DateTime JoinDate { get; set; }
    // more common properties or methods
}
public class Teacher : IPerson
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public int Age { get; set; }    
}

public class Student : IPerson
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public string Lesson { get; set; }   
}

public class Parent : IPerson
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public string StudentName { get; set; }

    public string Job { get; set; }    
}

现在,您可以轻松地将实现该接口的实例放入列表中:

var myList = new List<IPerson> { aTeacher, aStudent, aParent };

最后根据公共属性对它们进行排序:

var result = myList.OrderBy(x => x.JoinDate);

另外,我将类名更改为单数以识别Teacher单个实例。一个Teachers毫无意义。同时使用大写名称来遵循命名约定。

答案 1 :(得分:0)

首先,您必须创建一个类“Person”(或其他名称),它将指定公共属性“JoinDate”,以及所有其他公共属性(Name等)。这个类还应该实现IComparable,你将在其中实现方法“public int CompareTo(object obj)”,如下所示:

public int CompareTo(Person p) {
    return this.JoinDate.CompareTo(p.JoinDate);
}

您的三个班级(教师,学生和家长)应该从这个班级继承。然后你必须创建一个List实例并将三个列表添加到它:

List<Person> rList = new List<Person>();
rList.AddRange(teachersList);
rList.AddRange(studentsList);
rList.AddRange(parentsList);

要对列表进行排序,您只需要致电:

rList.Sort();

最后你的名单“rList”将被排序。

我希望这会有所帮助。