我试图存储一个来自对象的多个值的列表,并通过迭代循环将其存储在下拉列表中。
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)。我在论坛上搜索了一个解决方案,但我很难找到解决这个问题的方法。对此有任何帮助将非常感激。
答案 0 :(得分:1)
好吧,看到ListItem
类仅包含Text
和Value
,您需要某种方式将country.Slug
和country.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 - 这是您现在必须要做的事情。
希望这有帮助。