我正在尝试使用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`2 [System.Object的,System.Web.UI.WebControls.ListItem]' 输入'System.Web.UI.WebControls.ListItem []'。
任何人都可以建议如何更正Linq?
答案
根据蒂姆的意见,我使用了:
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()
答案 0 :(得分:1)
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
由于ugly function keyword,我在VB.NET中比纯方法语法更喜欢这种查询和方法语法的混合。但是,这是:
Dim items As ListItem() = ds.Tables(0).AsEnumerable().
Select(Function(dr) New ListItem(dr.Item("Value").ToString(),dr.Item("ID").ToString())).
ToArray()
即使它(技术上)是单一陈述,这也不是更有效。