使用Linq我必须添加列表项

时间:2012-10-11 11:30:55

标签: c# linq c#-4.0

IEnumerable<ReportFavorite> list = reportService.GetReportFavorites(userId);
ddlReportFavorite.Items.Add()

我不知道如何使用Linq将列表添加到下拉列表中。感谢。

6 个答案:

答案 0 :(得分:3)

您使用AddRange方法:

 var list = reportService.GetReportFavorites(userId);
 ddlReportFavorite.Items.AddRange(list.ToArray());

答案 1 :(得分:1)

根据您使用的下拉控件,其中任何一个都可以使用:

如果允许将其项目设置为IEnumerabe<ReportFavourite>

ddlReportFavorite.Items = reportService.GetReportFavorites(userId);

如果Items实现了AddRange方法:

ddlReportFavorite.Items.AddRange(reportService.GetReportFavorites(userId));

或者,如果这些失败

foreach(var reportFavourite in reportService.GetReportFavorites(userId))
    ddlReportFavorite.Items.Add(reportFavourite);

这两种方法都不是“使用LINQ”,因为LINQ不是一个很好的工具。 LINQ意味着无副作用。

修改 您的评论表明您使用的是System.Web.UI.WebControls.DropDownList。在这种情况下,Items集合只接受实例ListItem,因此您需要从ReportFavourites创建这些实例。尝试

foreach(var listItem in reportService.GetReportFavorites(userId)
                                     .Select(r => new ListItem(r.Id, r.Name))
    ddlReportFavorite.Items.Add(listItem);

在这里,我假设组合框应该显示ReportFavourite.Name并且值为ReportFavourite.Id。当然,使用您自己的属性

答案 2 :(得分:1)

或者如果您已经在方法中检查了数据的完整性,您可以简单地说:

ddlReportFavorite.Items.AddRange(reportService.GetReportFavorites(userId));

答案 3 :(得分:1)

以前我把它作为IEnumerable。现在我改为IList。现在工作正常。谢谢大家。

    int userId = workContext.CurrentUser.UserID;
    var reportFavoriteList = reportService.GetReportFavorites(userId);
    int count = reportFavoriteList.Count;

    for (int i = 0; i < count; i++)
    {
        ddlReportFavorite.Items.Add(reportFavoriteList[i].FavoriteName);
    }

答案 4 :(得分:0)

由于ddlReprotFavorite is an UI control and itsproperty represent a set of controls as well you ca n不直接添加您的业务实体,而不是使用DataSource属性,该属性会自动从基础业务实体创建Items集合。

IEnumerable<ReportFavorite> list = reportService.GetReportFavorites(userId);      
ddlReportFavorite.DataSource = list;

答案 5 :(得分:0)

IEnumerable<T>扩展了Union<T>方法,该方法将两个IEnumerable<T>联合起来。这是更漂亮的方式,没有强加它ToList()

var reportFavoriteList = reportService.GetReportFavorites(userId);
ddlReportFavorite.Items = ddlReportFavorite.Items.Union(reportFavoriteList);