我是这个linq的新手。我之前从未使用任何linq。因此,当我有一个方案将选定的项目从左侧列表移动到右侧列表时,我有一个很好的解决方案来自C#中的搜索,但我将其转换为VB。这是我得到的代码
Dim leftItems = lb_left.Items.Cast(Of ListItem)().ToList()
Dim rightItems = lb_right.Items.Cast(Of ListItem)().ToList()
'Get all selected items from left box
Dim LeftSelectedItems = leftItems.Where(Function(a) a.Selected).ToList()
'Add all selected items to right box
'Clear lb_right Items and add sorted list
lb_right.Items.Clear()
LeftSelectedItems.Union(rightItems).OrderBy(Function(a) a.Text).ToList().ForEach(Function(b) lb_right.Items.Add(b))
'Remove all selected items from left box
LeftSelectedItems.ForEach(Function(a) lb_left.Items.Remove(a))
以上是我从互联网上移动从左到右列表框的代码。但是在ForEach
中的那个函数上它给了我一个有点错误“表达式不会产生值”
我真的被这个错误所困扰。请求快速回复..
答案 0 :(得分:8)
LeftSelectedItems.ForEach(Sub(a) lb_left.Items.Remove(a))
答案 1 :(得分:1)
来自VB lambda expressions的文档:
单行函数的主体必须是返回值的表达式,而不是语句。单行函数没有Return语句。单行函数返回的值是函数体中表达式的值。
正如编译器所说,Add
没有返回值。
我相信你可以使用Sub
代替Function
,并使用多行版本 - 但我不认为这是最佳在这里工作的方式。
看起来您应该创建一个查询,然后使用一种“添加所有这些项目”调用。不幸的是,你没有告诉我们lb_right
的类型,甚至你是否使用WPF,WinForms,ASP.NET等。