如何实现 SQL where in for entity framework 6
How to implement SQL where in for entity framework 6
我正在尝试使用以下函数从 entity framework table 中过滤数据集。我遇到的问题是,当我到达 .ToList() 时,出现对象引用错误。如果我取出 .contains 行,查询工作正常。
Public Function List(entityModel As String, filter As BO.Filter.Import) As IList(Of BO.Import)
' Get import data '
Using context = New RBEntities
Dim result = context.import_data.Where(Function(s) s.entity_model = entityModel)
result = ApplyFilter(result, filter)
Return result.Select(Function(s) New BO.Import(s)).ToList()
End Using
End Function
Private Function ApplyFilter(result As IOrderedQueryable(Of import_data), filter As BO.Filter.Import) As IOrderedQueryable(Of import_data)
If Not filter.IDs Is Nothing AndAlso filter.IDs.Count > 0 Then
If Not filter.IDs(0) = -1 Then
result = result.Where(Function(w) filter.IDs.Contains(CInt(w.id)))
End If
End If
If Not String.IsNullOrEmpty(filter.Term) Then
result = result.Where(Function(w) w.data.ToLower().Contains(filter.Term.ToLower()))
End If
If Not filter.Status Is Nothing Then
result = result.Where(Function(w) w.status = filter.Status)
End If
If filter.UserProfileID > 0 Then
result = result.Where(Function(w) w.user_profile_id = filter.UserProfileID)
End If
Return result
End Function
通过替换以下内容设法解决了问题
result = result.Where(Function(w) filter.IDs.Contains(CInt(w.id)))
和
result = result.Where(Function(w) filter.IDs.Any(Function(a) a = w.id))
我正在尝试使用以下函数从 entity framework table 中过滤数据集。我遇到的问题是,当我到达 .ToList() 时,出现对象引用错误。如果我取出 .contains 行,查询工作正常。
Public Function List(entityModel As String, filter As BO.Filter.Import) As IList(Of BO.Import)
' Get import data '
Using context = New RBEntities
Dim result = context.import_data.Where(Function(s) s.entity_model = entityModel)
result = ApplyFilter(result, filter)
Return result.Select(Function(s) New BO.Import(s)).ToList()
End Using
End Function
Private Function ApplyFilter(result As IOrderedQueryable(Of import_data), filter As BO.Filter.Import) As IOrderedQueryable(Of import_data)
If Not filter.IDs Is Nothing AndAlso filter.IDs.Count > 0 Then
If Not filter.IDs(0) = -1 Then
result = result.Where(Function(w) filter.IDs.Contains(CInt(w.id)))
End If
End If
If Not String.IsNullOrEmpty(filter.Term) Then
result = result.Where(Function(w) w.data.ToLower().Contains(filter.Term.ToLower()))
End If
If Not filter.Status Is Nothing Then
result = result.Where(Function(w) w.status = filter.Status)
End If
If filter.UserProfileID > 0 Then
result = result.Where(Function(w) w.user_profile_id = filter.UserProfileID)
End If
Return result
End Function
通过替换以下内容设法解决了问题
result = result.Where(Function(w) filter.IDs.Contains(CInt(w.id)))
和
result = result.Where(Function(w) filter.IDs.Any(Function(a) a = w.id))