我必须使用LINQ(例如ID:3,34,35,36,98,43)基于列(datatype:string)整数值过滤记录。
此外,我尝试使用linq中的拆分,这是我的方案
Banners = Banners.Where(Function(x) Not String.IsNullOrEmpty(x.IDs) AndAlso x.[IDs].Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).Select(Function(a) Convert.ToInt32(a)).Contains(3))
我的方案在对ID进行拆分时显示错误
失败:执行System.Linq.Enumerable:Contains(IEnumerable`1,Int32)'目前尚未实现的数据库服务器端。
如何使用linq?
根据列ID整数值过滤记录答案 0 :(得分:0)
将.Contains替换为.Where(x => x == 3).FirstOrDefault()并检查非null。
就个人而言,如果这是您的数据结构,我会考虑重新设计数据库。如果没有发生,请不要费心转换为int。只需搜索字符串。
答案 1 :(得分:0)
您无法在LINQ to SQL中使用Split
,但可以使用String.Contains
,因此请将Split
/ Contains
翻译为String.Contains
:
Banners = Banners.Where(Function(x) Not String.IsNullOrEmpty(x.IDs) AndAlso (","+x.[IDs]+",").Contains(","+"3"+","))
答案 2 :(得分:-1)
我不确定你的Banner Class 但我尝试了以下逻辑,它运作良好
Module Module1
Sub Main()
Dim Banners = New List(Of Banner)
Banners = Banners.Where(Function(x) Not String.IsNullOrEmpty(x.IDs) AndAlso x.[IDs].Split(",").Select(Function(a) Convert.ToInt32(a)).Contains(3)).ToList()
End Sub
End Module
Class Banner
Private _IDs As String
Public Property IDs() As String
Get
Return "3,34,35,36,98,43"
End Get
Set(ByVal value As String)
_IDs = value
End Set
End Property
End Class
只有我改变的是我在分配给Banners对象时在Statement的末尾添加了ToList()