What is the cheapest way to execute a LINQ-Query immediately
在为 SO-answer 生成示例数据时,我想到了这个问题。
我不喜欢通过
1 2 3 4 5 6 7 8 | 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 |
如您所见,我根本不需要查询的结果,它的唯一目的是迭代和调用
诚然,这个问题有点虚伪,因为使用 f.e. 不会有很大的不同。
但无论如何,当只关心执行而不重要结果时,执行 LINQ 查询的最便宜的方式(就内存消耗、执行时间而言)是什么?
编辑:好的,这个问题是一个快速的问题和先有鸡还是先有蛋的问题。我想将 20 行代码减少到一行,但注意到我需要某种数据源用于 LINQ 查询。因此我创建了数组。但此时我也可以简单地使用 for-each 循环来添加 DataRows。
结论:将 LINQ 查询用于它的用途:查询。那么这个问题是没有意义的,因为没有最便宜的方法,只有返回正确结果的方法。
我只是将它重写为
1 2 3 | For Each y As String in years tbl.Rows.Add(y) Next |
这样更清楚你的意图是什么,并且立即执行。
我更倾向于使用
1 2 3 | Dim years As New List(Of String) From {"2010/2009","2009/2008","2008/2007","2007/2006","2006/2005","2005/2004","2004/2003"} years.ForEach(Sub(y) tbl.Rows.Add(y)) |
不过,这都是主观的,对于这些衬垫来说,循环可能是最清晰的。