puede agrupar por mes y tomar la primera o la última o lo que sea (que no nos ha dicho):
var news = News()
.GroupBy(n => n.Month)
.Select(grp => grp.Last());
Editar: A partir de la observación sobre la respuesta de Habib veo que desea 12 meses incluso si no hay noticias Luego hay que hacer un "LINQ de combinación externa":
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...
}
Editar: Puesto que usted tiene problemas para poner en práctica la consulta en su código, usted no necesitará seleccionar el tipo anónimo que contiene también el mes. También puede seleccionar sólo la noticia en 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();
Tenga en cuenta que ahora recibe 12 noticias, pero algunos de ellos podrían ser null
cuando no hay contenido para ese mes.
Si tienes múltiples registros durante un mes, ¿cómo quieres decidir cuál tomar? ¿El primero tal vez? – Jamiec
¿'Noticias' es una colección de elementos' Nuevos'? – Steven
@Danny no hay sobrecarga de Distinct que tome una lambda –