Si potrebbe gruppo per mese e prendere la prima o l'ultima o qualsiasi altra cosa (che non ci avete detto):
var news = News()
.GroupBy(n => n.Month)
.Select(grp => grp.Last());
Edit: Dal commento sulla risposta di Habib vedo che si desidera 12 mesi anche se non ci sono novità. Allora avete bisogno di fare un "Linq outer-join":
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...
}
Edit: Dal momento che hai problemi per implementare la query nel codice, non è necessario selezionare il tipo anonimo che contiene anche il mese. È anche possibile selezionare solo la notizia in sé:
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();
Si noti che è ora ottenere 12 notizia, ma alcuni di loro potrebbero essere null
quando non ci sono notizie in quel mese.
fonte
2012-05-09 10:18:00
Se hai più record per un mese, come vuoi decidere quale prendere? Il primo forse? – Jamiec
'News' è una raccolta di elementi' New'? – Steven
@Danny non c'è sovraccarico di Distinct che prende una lambda –