我有一个关于日期时间的专栏,希望在新列表中获得目标年份。
目标是使用从Games.Date列中提取的不同年份(YYYY,而不是YYYY-MM-DD HH:MM:SS)填充DropDownList。
我拥有的物品:
LDSYears (LinqDataSource)
LDSUserResults (LinqDataSource)
DropDownList1
LDSYears_Selecting (LinqDataSourceSelectEvent)
GridView1
我想我会使用LDSYears来填充DropDownList1,然后使用DropDownList1作为LDSUserResults中的Where语句来仅过滤DropDownList1中所选年份的用户结果。
LinqDataSourceSelectEvent是代码所在的位置。我在事件中有这个代码的原因是,我读过它不可能在LinqDataSource中使用destinct,我也想将输出修剪为仅年,而不是日期时间。
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专栏:
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和值的年份:
ID Years
1 2011
2 2010
3 2009
也许我以错误的角度看待这个问题,它应该成为可能?
我可以通过代码执行此操作,但我认为这是使用DropDownList作为LDSUserResults的过滤器的更好方法。
答案 0 :(得分:0)
听起来像你真正需要做的就是选择不同年份而你不需要ID。为什么不使用年份而不是两者的ID,这会有效吗?如果是,则为(From ys In db.Games Select ys.Date.Year).Distinct
ID的问题在于,如果两个游戏的年份相同,那么您返回哪个ID?
答案 1 :(得分:0)
假设您可以使用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))
正如Craig所指出的那样,如果您所做的只是绑定到DDL,则不需要ID。 DDL的每个列表项本身都有一个可以使用的索引。