我试图使用Linq将DataColumn值推入ListControl中。我的Linq代码如下:
ddl_listControl.Items.AddRange(
From dr As DataRow In ds.Tables(0).Row Select New ListItem(
dr.Item("Value").ToString(),
dr.Item("ID").ToString()
)
)无法将'WhereSelectEnumerableIterator`2System.Object,System.Web.UI.WebControls.ListItem‘类型的对象强制转换为“System.Web.UI.WebControls.ListItem[]”类型。
有人能告诉我如何纠正Linq吗?
答案
根据Tim的意见,我使用了:
ddl_regionSelected.Items.AddRange((From dr As DataRow In ds.Tables(0).Rows Select New ListItem(dr.Item("regionName").ToString(), dr.Item("ID").ToString())).ToArray())或者对于那些非常喜欢C#造型的人.(!)
ddl_regionSelected.Items.AddRange((From dr As DataRow In ds.Tables(0).Rows
Select New ListItem(
dr.Item("regionName").ToString(),
dr.Item("ID").ToString())
).ToArray())我遗漏的部分是将整个Linq语句封装在大括号中,然后强制转换为结果.ToArray()。
发布于 2015-01-21 15:20:05
ListItemCollection.AddRange只接受ListItem[],所以请使用:
Dim items = From rom In ds.Tables(0).AsEnumerable()
Select New ListItem(dr.Item("Value").ToString(),dr.Item("ID").ToString())
ddl_listControl.Items.AddRange(items.ToArray())或者一个简单的循环,它不需要这个新数组:
For Each item As ListItem in items
ddl_listControl.Items.Add(item)
Next由于使用了VB.NET,我更喜欢这种查询和方法语法的混合,而不是纯方法语法。然而,以下是:
Dim items As ListItem() = ds.Tables(0).AsEnumerable().
Select(Function(dr) New ListItem(dr.Item("Value").ToString(),dr.Item("ID").ToString())).
ToArray() 这并不是更有效的,即使它是(技术上)一条语句。
https://stackoverflow.com/questions/28070612
复制相似问题