C # лямбда, выберите .Distinct () или GroupBy () только на месяц? - PullRequest
0 голосов
/ 09 марта 2012

У меня есть следующее

protected void Page_Load(object sender, EventArgs e)
{
    DataX dx = new DataX();
    List<Excursion> lstExcur = new List<Excursion>();
    lstExcur = dx.GetAllExcursions();
    rptExcursionOuter.DataSource = lstExcur.Distinct(x => x.StartDate.Month); 
    rptExcursionOuter.DataBind();
}
protected void rptExcursionOuter_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        if (e.Item.DataItem != null)
        {
            Excursion Ritem = (Excursion)e.Item.DataItem;//<---- this bit errors, is there a way to keep the object intact but group or distinct by month?
            Literal LitExcursionMonth = (Literal)e.Item.FindControl("LitExcursionMonth");
            LitExcursionMonth.Text = Ritem.StartDate.ToString("MMMM");
        }
    }
}

Есть ли способ, которым я могу GroupBy или Определенно выбрать по месяцу, но сделать так, чтобы он перенастраивал объект, чтобы я мог получить доступ к элементу datadatabound? Любая помощь будет высоко оценена.

1 Ответ

2 голосов
/ 09 марта 2012

Сначала выполните GroupBy, чтобы получить IEnumerable<IGrouping<int, Excursion>>, где int равно Excursion.StartDate.Month:

 rptExcursionOuter.DataSource = lstExcur.GroupBy(x => x.StartDate.Month, x => x)
                                        .OrderBy(g => g.First().StartDate.Month);

Измените метод ниже:

protected void rptExcursionOuter_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        if (e.Item.DataItem != null)
        {
            var itemsByMonth = (IGrouping<int, Excursion>)e.Item.DataItem;
            Literal LitExcursionMonth = (Literal)e.Item.FindControl("LitExcursionMonth");
            LitExcursionMonth.Text = itemsByMonth.First().StartDate.ToString("MMMM");
        }
    }
}

ОБНОВЛЕНИЕ: добавлен OrderBy

...