无法转换为&#39; System.Collections.Generic.IEnumerable&#39;到System.Collections.Generic.IEnumerable <string>

时间:2015-07-27 20:08:14

标签: c# .net linq

我试图存储一个来自对象的多个值的列表,并通过迭代循环将其存储在下拉列表中。

ddlCountries.Items.AddRange((from country in countries
                               select new List<string> {
                               country.Name,
                               country.Slug,
                               country.Iso
                               })).ToList();

但是我使用select关键字收到此错误消息:

  

参数1:无法转换为&#39; System.Collections.Generic.IEnumerable&gt;&#39;到&#39; System.Web.UI.WebControls.ListItem []&#39;

最初我测试过以确保它可以使用ListItem从列表中检索值:

ddlCountries.Items.AddRange((from country in countries
                                     select new ListItem(country.Name, country.Slug))
                                     .ToArray<ListItem>());

这很好用,但我需要检索一个额外的字段(country.iso)。我在论坛上搜索了一个解决方案,但我很难找到解决这个问题的方法。对此有任何帮助将非常感激。

3 个答案:

答案 0 :(得分:1)

好吧,看到ListItem类仅包含TextValue,您需要某种方式将country.Slugcountry.Iso加入单个字符串值

ddlCountries.Items.AddRange((from country in countries
                             select new ListItem(
                                 country.Name,
                                 country.Slug + "," + country.Iso))
                             .ToArray());

这将使您仍然生成ListItem[]而不是List<List<string>>

答案 1 :(得分:1)

您可以尝试Anonymous Types

var src = from country in countries.AsEnumerable()
          select 
              name = country.Name, 
              slug = country.Slug,
              iso = country.Name + " " + country.slug
ddlCountries.dataSource = src.AsQueryable();
ddlCountries.DataBind();

答案 2 :(得分:0)

List期望List中每个项目只有一个String。您的新类型有三个字段。你可以试试这个:


    ddlCountries.Items.AddRange(
       ( from country in countries
         select new { country.Name, country.Slug, country.Iso } 
       ).ToList()
    );

但是,为什么你需要创建一个List?您是否尝试将查询作为数据源直接绑定到下拉列表?然后,您可以将哪个字段(例如Name)定义为Visible字段,将Slug / Iso定义为Value Field - 这是您现在必须要做的事情。

希望这有帮助。