2010-05-05 50 views
0

我想使用Linq而非以下功能:VB.Net LINQ的数据表已存在

Friend Function IsCollectionInTable2(ByVal apps As DataTable, ByVal collectionId As String) As Boolean 
    For Each row As DataRow In apps.Rows 
     If row("CollectionId").ToString = collectionId Then Return True 
    Next 
    Return False 
End Function 

我能做的最好的是下面:

Friend Function IsCollectionInTable(ByVal apps As DataTable, ByVal collectionId As String) As Boolean 
    Return (From row In apps.AsEnumerable() 
      Where (row.Field(Of String)("CollectionId") = collectionId) 
      Select row.Field(Of String)("CollectionId")).Count > 0 
End Function 

我想用疑问,或对在上面的功能。性能可能是一个问题,

回答

0

什么DataTable.Select Method (String)(对不起我的VB很差)

Dim expression As String 
    expression = string.Format("CollectionId = '{0}'", collectionId) 
    ' Use the Select method to find all rows matching the filter. 
    return apps.Select(expression).Count > 0 
+0

比我的例子更好,但它仍然必须读取所有行。我想使用Exists或Any,以便它可以尽快返回。 – LarsH 2010-05-05 13:52:47

1

我发现,似乎工作的解决方案:

Return (From row In apps.AsEnumerable() 
     Where row.Field(Of String)("CollectionId") = collectionId).Any() 

我希望这是一样快:

For Each row As DataRow In apps.Rows 
If row("CollectionId").ToString = collectionId Then Return True 
Next 
Return False