如何将两个条件过滤器添加到同一个 IEnumerable?

How can I add two conditional filters to the same IEnumerable?

如何融合这 2 个 If 语句,使我的两个 Droplist 过滤器协同工作来过滤数据?我有 2 个下拉列表(transfilter 和 Soortfilter),我希望能够 select 下拉列表 1 中的某些内容和 select 下拉列表 2 中的其他内容,然后按过滤器并让它显示具有的项目select通过两个过滤器进行过滤。

@ 这一点我有 Return View(query.ToList()) 只显示我从下拉列表 1

中筛选的项目
Function Index(transFilter As TransactieType?, soortfilter As Soort?) As ActionResult
            Dim query As IEnumerable(Of Pand)
            If Not transFilter.HasValue OrElse transFilter.Value = TransactieType.Beiden Then
                query = db.Panden
            Else
                query = db.Panden.Where(Function(p) p.TransactieType = transFilter.Value)

            End If
            If Not soortfilter.HasValue OrElse soortfilter.Value = Soort.All Then
                query = db.Panden
            Else
                query = db.Panden.Where(Function(p) p.Soort = soortfilter.Value)

            End If
            Return View(query.ToList())
        End Function

我正在尝试这个,但没有真正起作用

Function Index(transFilter As TransactieType?, soortfilter As Soort?) As ActionResult
    Dim query As IEnumerable(Of Pand)
    If Not transFilter.HasValue And soortfilter.HasValue OrElse transFilter.Value = TransactieType.Beiden And soortfilter.Value = Soort.All Then
        query = db.Panden
    Else
        query = db.Panden.Where(Function(p) p.TransactieType = transFilter.Value And p.Soort = soortfilter.Value)

    End If

    Return View(query.ToList())

问题是您在两个 If 语句的第一部分都设置了 query = db.Panden。当您处理增量构建 LINQ 查询时,总是

  1. 从一个基本案例开始。在这种情况下,它将是 Dim query As IEnumerable(Of Pand)
  2. 使用 query = query.Where.

    将每个附加过滤器直接添加到该基本案例
    Function Index(transFilter As TransactieType?, soortfilter As Soort?) As ActionResult
        Dim query As IEnumerable(Of Pand) = db.Panden
        If transFilter.HasValue AndAlso transFilter.Value <> TransactieType.Beiden Then
            query = query.Where(Function(p) p.TransactieType = transFilter.Value)
        End If
    
        If soortfilter.HasValue AndAlso soortfilter.Value <> Soort.All Then
            query = query.Where(Function(p) p.Soort = soortfilter.Value)
        End If
    
        Return View(query.ToList())
    End Function