Как выполнить оператор LINQ, не назначая его переменной? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть следующая функция

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

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Да, вы можете, но вы не можете использовать синтаксис запроса:

PositionsAdapter.GetData().Where(Function(pos) pos.SchoolID = SchoolID) _
                          .ToList().ForEach(Sub(i) positions.ImportRow(i))
1 голос
/ 15 апреля 2011

вы можете просто перебрать его в цикле foreach.Возвращаемое значение операторов LINQ IEnumerable<T> глубоко внизу, поэтому итерируемое.

Кроме того, вы можете создать метод ForEach (он не был включен, поскольку стек LINQ равен not с побочными эффектами, а ForEach - это все о побочных эффектах) в качестве расширения на IEnumerable<T>, вам не нужно звонить ToList раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...