2012-05-09 43 views
5

可能重複:
Distinct() with lambda?LINQ - 按價值區分?

代碼:

news = (from New myNew in new News() 
     select myNew).Distinct().ToList(); 

但這一獨特的是 「物」 有相同的價值觀。我需要在我的列表中每月輸入myNew。 (一月一月,一月一月,等等)。比,news將獲得12條記錄。

是否有可能是一種Distinct(myNew.Month)

+0

如果你有多個記錄一個月,你想如何決定採取哪一個?第一個也許? – Jamiec

+1

'News'是'New'元素的集合嗎? – Steven

+0

@Danny沒有超過Distinct需要一個lambda –

回答

12

你可以按月組和採取的第一個或最後一個或任何(你還沒有告訴我們):

var news = News() 
      .GroupBy(n => n.Month) 
      .Select(grp => grp.Last()); 

編輯:從上Habib的答案我看到你要12個月的評論即使沒有消息。然後,你需要做一個「LINQ的外連接」:

var monthlyNews = from m in Enumerable.Range(1, 12) // left outer join every month 
        join n in News() on m equals n.Month into m_n 
        from n in m_n.DefaultIfEmpty() 
        group n by m into MonthGroups 
        select new { 
         Month = MonthGroups.Key, 
         LastNews = MonthGroups.Last() 
        }; 
foreach (var m in monthlyNews) 
{ 
    int month = m.Month; 
    var lastNewsInMonth = m.LastNews; 
    if (lastNewsInMonth != null) ; // do something... 
} 

編輯:既然你有問題,實現在你的代碼查詢,你不需要選擇包含也是匿名類型月。您也可以只選擇了新聞本身:

var monthlyNews = from m in Enumerable.Range(1, 12) // every motnh 
        join n in news on m equals n.Month into m_n 
        from n in m_n.DefaultIfEmpty() 
        group n by m into MonthGroups 
        select MonthGroups.Last(); 

注意,你現在得到12日消息,但他們中的一些可能是null當有那個月沒有任何消息。

+0

爲什麼發佈答案後,這已被標記爲重複與完全相同的答案? –

+0

@DannyVarod:因爲1.它不是完全相同的答案(順便說一句,我以前沒有看到答案)2.如果OP會澄清他的要求,兩個問題可能會有更多的不同。 –

+0

@DannyVarod:現在好點了嗎? ;-) –

5
var result = News() 
    .GroupBy(p => p.Month) 
    .Select(g => g.First()) 
    .ToList(); 
+0

問題是:如果四月不存在任何新的...我怎麼能插入「空」而不是? – markzzz

0
var vNews = News() 
       .GroupBy(p => p.Month) 
       .Select(g => g.First()) 
       .ToList(); 
2

短手溶液

var vNews = News() 
       .GroupBy(p => p.Month, (key, p) => p.FirstOrDefault()) 
       .ToList();