2010-09-24 36 views
0

我有List對象填充了自定義結構的實例。列出List對象中的所有重複項,包括數量

 list.Add(new Mail("mail1", "test11", "path11")); 
     list.Add(new Mail("mail2", "test12", "path12")); 
     list.Add(new Mail("mail1", "test13", "path13")); 
     list.Add(new Mail("mail1", "test14", "path14")); 
     list.Add(new Mail("mail2", "test15", "path15")); 

     var q = from x in list 
       group x by x.Sender into g 
       let count = g.Count() 
       where count > 2 
       orderby count descending 
       select new { Sender = g.Key}; 

     foreach (var x in q) 
     { 
      Console.WriteLine(x.Sender); 
     } 

代碼的輸出會是這樣:

MAIL1

但因爲我需要在超過兩次(或者n次),在此基礎上提供更多的每個郵件項工作一個特定的屬性(即發件人)的值,我需要一個查詢來顯示所有比n更頻繁的項目(包括對相應郵件項目的引用)

填寫完查詢後,我很想做點什麼像這樣:

foreach (var x in q) 
    { 
     Console.WriteLine(x.Sender + " - " + x.Path + " - " + x.Count); 
    } 

我是新來的LINQ,但我確信這是可能的。

感謝您的幫助

問候, 凱文

回答

1

包含的屬性被添加到您的匿名類型。

var q = from x in list 
     group x by x.Sender into g 
     let count = g.Count() 
     where count > 2 
     orderby count descending 
     select new 
     { // add your fields here 
      Sender = g.Key, 
      Path = ...,  // not sure what you wanted here 
      Count = count, 
      Mails = g,  // include the mails in the group 
     }; 

然後,你可以用它做你想要的。

foreach (var x in q) 
{ 
    // each x is a type with the fields 
    //  Sender 
    //  Path 
    //  Count 
    //  Mails 
    Console.WriteLine(x.Sender + " - " + x.Path + " - " + x.Count); 
    foreach (var mail in x.Mails) 
    { 
     // do something with each individual mail 
    } 
} 
+0

多數民衆贊成在完美,雖然我不喜歡(每個)嵌套(環); - )無論如何,非常感謝 – bitfrickler 2010-09-24 06:47:31

相關問題