如何将两个不同的列表合并/连接成1

时间:2011-09-03 01:57:17

标签: c# silverlight windows-phone-7

我正在开发Windows Phone平台的应用程序。遇到问题。

我有2个不同的List,1个是从xml文件直接读取的,另一个是通过一些计算。我想将这两个列表合并为1,所以我可以将它显示出来。

清单1:

public class studentClass1
{
    public string studentID { get; set; }
    public string studentFirstName { get; set; }
    public string studentLastName { get; set; }
}

清单2:

public class studentClass2
{
    public string studentID { get; set; }
    public string studentGradePoint { get; set; }
}

首先,我通过

读出了studentClass1
var studentList= from query in studentIndex.Descendants("student")
                             select new driversClass
StudentList1 = studentList.ToList();

其次,我在功能上处理学生成绩点计算并输出到第二个列表:

studentClass2 SG = new studentClass2
            {
                studentID = thestudentID ,
                studentGradePoint  = thestudentGradePoint .ToString()
            };

            StudentList2.Add(SG);

studentListAll = StudentList1 + StudentList2

现在,我想将这两个列表连接在一起,以便我可以通过调用

输出到屏幕
studentResultListBox.Itemsource = StudentListAll;

任何建议代码会是什么样子? 感谢。

2 个答案:

答案 0 :(得分:3)

假设您只想组合两个列表中的相应信息(从您的问题中并不完全清楚) - 引入第三个类studentClass3,它包含您想要的所有属性,并使用连接来匹配实例匹配studentID

var studentList3 = (from s1 in studentList1
                    join s2 in studentList2 on s1.studentID equals s2.studentID
                    select new studentClass3()
                    {
                        studentFirstName = s1.studentFirstName,
                        studentID = s1.studentID,
                        studentGradePoint = s2.studentGradePoint,
                        studentLastName = s1.studentLastName
                    }).ToList();

一般来说,当您在XML中阅读而不是稍后尝试组合列表时,应该相当解决这个问题 - 为学生提供三个不同的课程可能会让人感到困惑。另请参阅推荐的命名约定,它们稍微偏离。

答案 1 :(得分:0)

使用界面,例如

interface IStudent
{
    string studentID { get; }

    // other common properties below
}

public class StudentClass1 : IStudent
{
    public string studentID { get; set; }
    public string studentFirstName { get; set; }
    public string studentLastName { get; set; }
}

public class StudentClass2 : IStudent
{
    public string studentID { get; set; }
    public string studentGradePoint { get; set; }
}

然后

    studentResultListBox.Itemsource = list1.Cast<IStudent>()
                                           .Concat(list2.Cast<IStudent>())
                                           .ToList();

或者,如果继承不是这种情况,只需将所有内容强制转换为System.Object(+覆盖object.ToString)

 studentResultListBox.Itemsource = list1.Cast<object>()
                                        .Concat(list2.Cast<object>())
                                        .ToList();