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

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

4

6 回答 6

3

你一个使用AddRange方法:

 var list = reportService.GetReportFavorites(userId);
 ddlReportFavorite.Items.AddRange(list.ToArray());
于 2012-10-11T11:34:53.860 回答
1

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

如果它允许将其 Items 设置为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 的值。使用你自己的属性,当然

于 2012-10-11T11:35:22.003 回答
1

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

ddlReportFavorite.Items.AddRange(reportService.GetReportFavorites(userId));
于 2012-10-11T11:44:40.707 回答
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);
    }
于 2012-10-11T12:54:46.547 回答
0

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

IEnumerable<ReportFavorite> list = reportService.GetReportFavorites(userId);      
ddlReportFavorite.DataSource = list;
于 2012-10-11T12:49:23.610 回答
0

由合并两个的IEnumerable<T>方法扩展。这是更漂亮的方式,无需强制转换。Union<T>IEnumerable<T>ToList()

var reportFavoriteList = reportService.GetReportFavorites(userId);
ddlReportFavorite.Items = ddlReportFavorite.Items.Union(reportFavoriteList);
于 2012-10-11T13:03:56.840 回答