2011-01-20 60 views
0

這些都在C#中,使用.NET 3.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個列表。我試圖避免這種情況。是this question在我的正確軌道上?

編輯:要回答菲利普的問題,列表使用含托馬斯·萊維斯克的回答這些屬性的類:

class Course 
{ 
    public string Abbreviation { get; set; } 
    public int Number { get; set; } 
    public string Section { get; set; } 
} 

,並通過一種方法從數據訪問類填充:

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

希望這清除了這一點。

+0

如何定義myList1 ? – Philipp 2011-01-20 19:15:50

回答

1

假設下面的類聲明:如果您使用的是List<Tuple<string, string, string>>

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(); 
1

,你可以這樣做::

class Course 
{ 
    public string Abbreviation { get; set; } 
    public int Number { get; set; } 
    public string Section { get; set; } 
} 

你可以做這樣的事情

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)))); 
+1

3.5中的String.Join需要一個數組,而不是IEnumerable。需要IEnumerable的重載僅在4.0 – 2011-01-20 19:34:20