使用 Linq 从 DataTable 填充 ListControl
Populating ListControl from DataTable using Linq
我正在尝试使用 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()
)
)
Unable to cast object of type
'WhereSelectEnumerableIterator`2[System.Object,System.Web.UI.WebControls.ListItem]'
to type '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()
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()
即使它是(技术上)单个语句,也不会更有效。
我正在尝试使用 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()
)
)
Unable to cast object of type 'WhereSelectEnumerableIterator`2[System.Object,System.Web.UI.WebControls.ListItem]' to type '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()
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()
即使它是(技术上)单个语句,也不会更有效。