我在http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-实现 Scott G 的 Dynamic.vb 扩展时遇到问题query-library.aspx在我的 vb 解决方案中。我知道可能还有其他方法,但是这种方法会给我很大的灵活性。我搜索了 StackOverflow(80 多个问答)和许多其他网站,但运气不佳。我正在使用 VS 2010。
我已将 Dynamic.vb 包含在没有根名称空间的问题中,然后在我的主要项目中添加了对该项目的引用。我得到了 4 个重载(而不是 2 个)的智能感知,所以我很确定扩展在范围内。
我在使用条款时遇到了困难,尤其是 Scott 演示的 OrderBy。如果我只是将字符串作为 Scott 的 VB 示例传递,我会收到错误“重载解析失败,因为无法使用这些参数调用可访问的 'OrderBy'。”
代码行是:
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
.OrderBy("Name")
因此,我找到了其他说明传递 Lambda 表达式的参考资料。所以我尝试了这个,至少我没有收到错误,即使排序功能似乎仍然不起作用。这是编译和执行的代码。
Private Sub SortByColumn()
If Not cmbComponentFilter.SelectedItem.ToString = "All" Then
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
Where Component.ComponentType.ToString = cmbComponentFilter.SelectedItem.ToString _
Order By Component.Name
Dim OrderedFilteredComponentList = From Component As MX.Component In FilteredComponentList.AsQueryable _
.OrderBy(Function(str) dgvComponents.Columns(e.ColumnIndex).Name)
bsComponentList.DataSource = OrderedFilteredComponentList
dgvComponents.DataSource = bsComponentList
Else
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
.OrderBy(Function(str) dgvComponents.Columns(e.ColumnIndex).Name)
bsComponentList.DataSource = FilteredComponentList
dgvComponents.DataSource = bsComponentList
End If
End Sub
当我询问 dgvComponents.Columns(e.ColumnIndex).Name 时,它给出了我希望排序的对象属性,但排序仍然不起作用。我担心为什么我不能让 Scott 的实现工作,但我听过他的主题演讲并阅读了他的博客,所以我猜问题出在我的实现上。
我想要么工作,但也需要了解原因。为什么传递字符串不起作用?函数中声明的PARAMARRAY不是可选的吗?我已经在这方面投入了 8 个小时,虽然我可以走其他路,但我太致力于寻找这种方法的答案而放弃(与方法的自杀协议。)
任何指导将不胜感激。我非常沮丧,如果这是一个愚蠢的错误(通常是这样),我什至不会打扰我。
感谢您的任何帮助。
r/杰米