2011-04-15 108 views
1

我有以下功能如何执行LINQ语句而不将其分配给变量?

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 

回答

1

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

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

可以只需在foreach循环中迭代它即可。 LINQ运算符的返回值为IEnumerable<T>,因此可迭代。

此外,您还可以创建一个ForEach方法(这是不作为LINQ堆栈约有副作用,ForEach是所有关于副作用)作为IEnumerable<T>的扩展,你不必先致电ToList

+0

啊,真的,好像我的λ停留在我的头上,是过于复杂了。我可以简单地做... '对于每个项目在(从pos在PositionsAdapter.GetData() 哪里(pos.SchoolID = SchoolID) 选择pos) positions.ImportRow(item) Next – MHollis 2011-04-15 18:05:23

相关问题