Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较泛型列表的特定属性并合并类似数据_C#_List_Generics_Filter_Comparison - Fatal编程技术网

C# 比较泛型列表的特定属性并合并类似数据

C# 比较泛型列表的特定属性并合并类似数据,c#,list,generics,filter,comparison,C#,List,Generics,Filter,Comparison,这都是用C语言编写的,使用的是.NET3.5 我有一个包含书籍信息的列表。每个项目包含课程缩写、课程编号和课程部分: myList1.Add("ACCT", 100, "1"); myList1.Add("ACCT", 100, "2"); myList1.Add("BUS", 101, "1"); and so on... 我需要做的是将具有相同课程和课程的项目组合在一起,使各部分成为一个字符串 "ACCT", 100, "1, 2" "BUS", 101, "1" 我应该如何比较列表中的

这都是用C语言编写的,使用的是.NET3.5

我有一个包含书籍信息的列表。每个项目包含课程缩写、课程编号和课程部分:

myList1.Add("ACCT", 100, "1");
myList1.Add("ACCT", 100, "2");
myList1.Add("BUS", 101, "1"); and so on...
我需要做的是将具有相同课程和课程的项目组合在一起,使各部分成为一个字符串

"ACCT", 100, "1, 2"
"BUS", 101, "1"
我应该如何比较列表中的每个项目以检查是否匹配?最初的方法使用了一长串if-else语句,并使用了5个列表。我尽量避免这样。这对我来说是正确的吗

编辑:为了回答Philipp的问题,列表使用了一个类,该类包含类似于Thomas Levesque的答案的属性:

class Course
{
    public string Abbreviation { get; set; }
    public int Number { get; set; }
    public string Section { get; set; }
}
并由DataAccess类中的方法填充:

List<Course> list = DataAccess.GetData();

希望这能澄清这一点。

假设以下类声明:

class Course
{
    public string Abbreviation { get; set; }
    public int Number { get; set; }
    public string Section { get; set; }
}
你可以这样做:

var list = new List<Course>
{
    new Course { Abbreviation = "ACCT", Number = 100, Section = "1" },
    new Course { Abbreviation = "ACCT", Number = 100, Section = "2" },
    new Course { Abbreviation = "BUS", Number = 101, Section = "1" },
    ...
};

var query = from c in list
            group c by new { c.Abbreviation, c.Number } into g
            select string.Format("\"{0}\", {1}, \"{2}\"",
                                 g.Key.Abbreviation,
                                 g.Key.Number,
                                 String.Join(", ", g.Select(c => c.Section).ToArray()));

List<string> result = query.ToList();
如果使用列表,您可以执行以下操作:

    var newList = myList1.GroupBy(i => new { i.Item1, i.Item2 })
                         .Select(g => new Tuple(g.Key.Item1, 
                                                g.Key.Item2, 
                                                String.Join(", ", g.Select(i => i.Item3))));

在3.5中,String.Join接受数组,而不是IEnumerable。只在4.0中添加了接受IEnumerable的重载