立即执行LINQ-Query的最便宜方法是什么

Tim*_*ter 2 .net linq vb.net performance

在为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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我根本不需要查询的结果,它的唯一目的是迭代和调用DataTable.Rows.Add.因此,结果已在DataTable本身中可用,而不需要查询.

不可否认,这个问题有点不合理,因为使用fe ToList并没有太大的区别,通常查询的目的是返回一些东西.

但无论如何,当只执行而不是结果重要时,执行LINQ查询的最便宜的方式(就内存消耗,执行时间而言)是什么?

编辑:好的,这个问题是快速拍摄和鸡蛋问题.我想将20行代码减少到一行,但注意到我需要某种类型的DataSource用于LINQ-Query.因此我创建了阵列.但是在这一点上我可以简单地使用for-each循环来添加DataRows.

结论:使用LINQ-Query来获取它的用途:查询.然后这个问题毫无意义,因为没有最便宜的方式,只有返回正确结果的方法.

tza*_*man 9

我只是将其重写为foreach:

For Each y As String in years
    tbl.Rows.Add(y)
Next
Run Code Online (Sandbox Code Playgroud)

用这种方式表达你的意图要清楚得多,而且它会马上执行.