C# C-从.net 4.0中的dropdownlist中删除重复项

C# C-从.net 4.0中的dropdownlist中删除重复项,c#,linq,drop-down-menu,C#,Linq,Drop Down Menu,.net framework 4.0中遇到的问题 我目前有两个下拉列表,一个用于月份选择,另一个用于年份选择 它们的两个数据源都是来自SQL的数据表,SQL返回以年和月为列的行。然后,我使用datatextfield和datavaluefield指定要使用的列。例如: string sql = "select.... group by...";//the query DataTable dtMonthYear = db.getDataTable(sql); //got the datatabl

.net framework 4.0中遇到的问题

我目前有两个下拉列表,一个用于月份选择,另一个用于年份选择

它们的两个数据源都是来自SQL的数据表,SQL返回以年和月为列的行。然后,我使用datatextfield和datavaluefield指定要使用的列。例如:

string sql = "select.... group by...";//the query

DataTable dtMonthYear = db.getDataTable(sql); //got the datatable

ddlMonth.DataSource = dtMonthYear;
ddlMonth.DataTextField = "Month";
ddlMonth.DataValueField = "Month";
ddlMonth.DataBind();

ddlYear.DataSource = dtMonthYear;
ddlMonth.DataTextField = "Year";
ddlMonth.DataValueField = "Year";
ddlYear.DataBind();
因此,今年将有重复的项目,我希望消除重复的项目

我发现linq可以做到这一点,但不幸的是,我的框架直到4.0才开始使用,并且不能使用datarowextension。以下是我得到的链接:

有人有其他想法吗

谢谢

您可以在.NET 4甚至3.5中使用:

DataTable years = dtMonthYear.AsEnumerable()
                  .GroupBy(r => r.Field<int>("Year"))
                  .Select( g => g.OrderBy(r => r.Field<int>("Month")).First())
                  .CopyToDataTable();

请注意,您需要使用System.Linq

不幸的是,我的框架一直到4.0。这意味着什么?因为从我发现的示例来看,我似乎可以使用linq来实现这一点,但要使用扩展将其转换回datatable,我需要使用DataRowExtensions,但它仅在.net 4.5中可用……或者我错了吗?DataRowExtensions在.net 4.5中可用, 4.0, 3.5. 检查此项我仍然无法使用CopyToDataTable,原因不明,即使我在代码中添加了System.Ling。我将您的答案与Cuong Le的答案结合起来,得到的结果是一个列表…但是,当我尝试运行它时,在下拉列表数据绑定期间会出现错误,表示int数据类型没有属性名称year,您只能在IEnumerable上使用CopyToDataTable,就像我的方法一样,而列表不是。但是数据源不需要DataTable,也可以使用List。为什么列表不能使用.DataBind方法?我试过了,它似乎预期列表中会出现一些键值对。您可以使用ddlmount.Items.Add或匿名类型作为支持类型:ddlmount.DataSource=list.Selecti=>mew{key=I.ToString,value=I.ToString};。嗯,列表。选择方法给了我错误。如果这让你感到不安,我很抱歉,但我是林克的不速之客=