如何在linq中拆分MULTIPLE整数值列

时间:2018-04-22 11:49:50

标签: asp.net .net vb.net linq

我必须使用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整数值过滤记录

3 个答案:

答案 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()