希望我的VB沒關係;我在C#中更舒適。我不確定這是否適用於LINQ to SQL,但靠近底部的GetTableRecordCount測試通過。我假設你在表中使用不同的數據類型,因此是通用方法。
Imports System.Text
Imports System.Linq.Expressions
Class Product
Public Id As Integer
Public Name As String
Sub New(id As Integer, name As String)
Me.Id = id
Me.Name = name
End Sub
End Class
Class Order
Public Id As Integer
Public NumberOfItems As Integer
Sub New(id As Integer, numItems As String)
Me.Id = id
Me.NumberOfItems = numItems
End Sub
End Class
Class DataContext
Public Property Products As IEnumerable(Of Product)
Public Property Orders As IEnumerable(Of Order)
Sub New()
Me.Products = New Product() {New Product(1, "Apple"), New Product(2, "Banana")}
Me.Orders = New Order() {New Order(1, 20), New Order(2, 50)}
End Sub
End Class
<TestClass()>
Public Class Main
Dim MyDataContext As DataContext
<TestMethod()>
Public Sub GetTableRecordCount()
Me.MyDataContext = New DataContext()
Assert.IsTrue(Me.GetTableRecordCount(Of Product)("Products", Function(p) p.Id, 1, Function(p) p.Name.Length, 5))
Assert.IsTrue(Me.GetTableRecordCount(Of Order)("Orders", Function(o) o.Id, 2, Function(o) o.NumberOfItems, 50))
End Sub
Private Function GetTableRecordCount(Of TRow)(tableName As String, getParam1 As Func(Of TRow, Integer), iParam1 As Integer, getParam2 As Func(Of TRow, Integer), iParam2 As Integer) As Boolean
Try
Dim propertyExpr = Expression.Property(Expression.Constant(Me.MyDataContext), tableName)
Dim getTableData = Expression.Lambda(Of Func(Of IEnumerable(Of TRow)))(propertyExpr).Compile()
Dim detailReturned =
From row In getTableData()
Where getParam1(row) = iParam1 And getParam2(row) = iParam2
Select row
Return detailReturned.Count() > 0
Catch ex As Exception
Return False
End Try
End Function
End Class
我認爲這可以幫助:LINQ to SQL的:動態SQL表名(http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/6273d072-f500-4382- afb4-8eafd185794d /) –
有點偏離主題,但'任何'而不是'Count'在這裏效率更高。 –