Выберите столбцы лет и лет, возвращая новый список с разными годами. - PullRequest
1 голос
/ 05 ноября 2011

У меня есть столбец с датой и временем, и я хочу получить годы назначения в новом списке.

Цель состоит в том, чтобы заполнить DropDownList только определенными годами (ГГГГ, а не ГГГГ-ММ-ДД ЧЧ: ММ: СС), извлеченными из столбца Games.Date.

У меня есть объекты:

LDSYears (LinqDataSource)
LDSUserResults (LinqDataSource)
DropDownList1
LDSYears_Selecting (LinqDataSourceSelectEvent)
GridView1

Я думал, что буду использовать LDSYears для заполнения DropDownList1, а затем использовать DropDownList1 в качестве оператора Where в LDSUserResults для фильтрации только пользовательских результатов за год, который был выбран в DropDownList1.

LinqDataSourceSelectEvent - это место, где расположены коды. Причина, по которой у меня есть этот код в Событии, заключается в том, что, как я прочитал, невозможно использовать destinct в LinqDataSource, и я также хочу обрезать вывод только по году, а не по дате / времени.

Protected Sub LDSYears_Selecting(sender As Object, _
        e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) _
    Handles LDSYears.Selecting

    Dim years = From dy In (From ys In db.Games _
                            Where ys.Date.Year.ToString <> "" Distinct _
                            Select ys.ID, ys.Date Distinct) _
                        Select dy _
                        Order By dy.Date Descending
    e.Result = years
End Sub

Games.Date column:

2009-01-10 09:00:00
2009-03-10 09:00:00
2010-02-10 09:00:00
2010-03-10 09:00:00
2011-01-10 09:00:00
2011-03-10 09:00:00

И я хочу, чтобы новый список, подобный этому, был добавлен в мой DropDownList, идентификатор для индекса и Годы для значения:

ID Years
1  2011
2  2010
3  2009

Может быть, я смотрю на это под неправильным углом, это возможно?

Я могу сделать это с помощью кода, но я подумал, что это лучший способ использовать DropDownList в качестве фильтра для LDSUserResults.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2011

Предполагая, что вы в порядке со списком Integer вместе с индексом, вы можете просто сделать:

Dim years = (From dy In dc.Dates 
                Select dy.Date1.Year).Distinct().OrderByDescending(Function(year) year).AsEnumerable().Select(Function(year, index) New With {index, year})

Response.Write(String.Join(", ", years))

Как указал Крейг, если все, что вы делаете, это привязываетесь к DDL, вам не нужен идентификатор. Каждый элемент списка вашего DDL по своей сути имеет индекс, который вы можете использовать.

0 голосов
/ 05 ноября 2011

Звучит так, как будто все, что вам действительно нужно, - это выбрать разные годы, и вам не нужно удостоверение личности. Почему бы не использовать год вместо идентификатора для обоих, это сработает? Если это так, это будет (From ys In db.Games Select ys.Date.Year).Distinct

Проблема с идентификатором заключается в том, что если две игры имеют одинаковый год, то какой идентификатор вы возвращаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...