Этот вопрос возник у меня во время генерации образцов данных для SO-ответа.Мне не нравится подробный способ добавления DataRows один за другим с помощью Tbl.Rows.Add
, поэтому я создал этот псевдо-LINQ-запрос, который ничего не делает, кроме неявного добавления строк:
Private Function GetData() As DataTable
Dim years = {"2010/2009", "2009/2008", "2008/2007", "2007/2006", "2006/2005", "2005/2004", "2004/2003"}
Dim tbl = New DataTable
tbl.Columns.Add(New DataColumn("Year"))
' adds DataRows to the DataTable, need Count to execute the query '
Dim c = (From y In years Select tbl.Rows.Add(y)).Count
Return tbl
End Function
Как вы можете видеть, ярезультат запроса вообще не нужен, его единственная цель - выполнить итерацию и вызвать DataTable.Rows.Add
.Таким образом, результат уже доступен в самой DataTable и не нужен в запросе.
По общему признанию, этот вопрос несколько гипотетичен, поскольку не было бы большой разницы в использовании fe ToList
, и обычно целью запроса являетсявернуть что-то.
Но в любом случае, какой самый дешевый способ (с точки зрения потребления памяти, времени выполнения) выполнить запрос LINQ, когда имеет значение только выполнение, а не результат?
Редактировать : Хорошо, этот вопрос был быстрым решением проблемы курицы и яйца.Я хотел сократить 20 строк кода до одной строки, но заметил, что мне нужен какой-то источник данных для LINQ-запроса.Для этого я создал массив.Но в этот момент я мог бы просто использовать цикл for-each, чтобы добавить DataRows.
Заключение : используйте запрос LINQ для того, для чего он предназначен: запрос .Тогда этот вопрос не имеет смысла, так как нет самого дешевого пути, а есть только тот, который возвращает правильный результат.