【问题标题】:How to execute a LINQ statement without assigning it to a variable?如何在不将其分配给变量的情况下执行 LINQ 语句?
【发布时间】:2011-04-15 17:48:07
【问题描述】:

我有以下功能

Public Function GetPositionBySchoolID(ByVal SchoolID As Integer) As CPAPositionsDataTable
    Dim positions As New CPAPositionsDataTable
    Dim tmp = (From pos In PositionsAdapter.GetData()
                Where (pos.SchoolID = SchoolID)
                Select pos)
    tmp.ToList.ForEach(Sub(i) positions.ImportRow(i))
    Return positions
End Function

我想知道是否有任何方法可以取消将 LINQ 结果分配给 tmp 并直接使用结果,即

Public Function GetPositionBySchoolID(ByVal SchoolID As Integer) As CPAPositionsDataTable
    Dim positions As New CPAPositionsDataTable
    (From pos In PositionsAdapter.GetData()
                Where (pos.SchoolID = SchoolID)
                Select pos).ToList.ForEach(Sub(i) positions.ImportRow(i))
    Return positions
End Function

【问题讨论】:

    标签: vb.net linq lambda datatable


    【解决方案1】:

    可以,但不能使用查询语法:

    PositionsAdapter.GetData().Where(Function(pos) pos.SchoolID = SchoolID) _
                              .ToList().ForEach(Sub(i) positions.ImportRow(i))
    

    【讨论】:

      【解决方案2】:

      您可以简单地在 foreach 循环中对其进行迭代。 LINQ 操作符的返回值是IEnumerable<T>,所以可以迭代。

      另外,您可以创建一个 ForEach 方法(这不包括在内,因为 LINQ 堆栈是关于没有有副作用,而 ForEach 是关于副作用的)作为扩展在IEnumerable<T> 上,您之前不必致电ToList

      【讨论】:

      • 啊,真的,似乎我的 lambda 卡在我的脑海里,并且过于复杂了。我本可以简单地完成...' For Each item In (From pos In PositionsAdapter.GetData() Where (pos.SchoolID = SchoolID) Select pos) position.ImportRow(item) Next
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      相关资源
      最近更新 更多