多行 where 子句

multiple line where clauses

我有一个包含多个输入(文本字段)的搜索页面。这些输入可能为空,也可能不为空 - 取决于用户搜索的内容。

为了适应这一点,我创建了一个基础 searchQuery 对象,它引入了所有正确的关系,然后对于每个非空输入,我使用 searchQuery.Where 函数修改了查询。

如果我在 WHERE 子句中放置多个条件,我会收到以下错误:

Cannot compare elements of type 'System.Collections.Generic.ICollection`1'. Only primitive types, enumeration types and entity types are supported.

searchQuery = searchQuery.Where(Function(m) (
                (absoluteMinimumDate < m.ClassDates.OrderBy(Function(d) d.Value).FirstOrDefault.Value) _
                OrElse (Nothing Is m.ClassDates)
                                             )
                                )

我知道代码看起来很时髦,但我试图对其进行格式化,这样您就不必水平滚动就可以看到全部内容

现在,如果我删除 ORELSE 子句,一切正常(但当然我没有得到我需要的结果)。

searchQuery = searchQuery.Where(Function(m) (
                            (absoluteMinimumDate < m.ClassDates.OrderBy(Function(d) d.Value).FirstOrDefault.Value)
                                                         )
                                            )

这个很好用

那么,我做错了什么?如何制作多条件 where 子句?

Where 中的多个条件不是问题。 m.ClassDates Is Nothing 永远不会是真的,并且在 SQL 术语中没有意义。您无法将 "is the set of ClassDates associated with this record NULL?" 翻译成 SQL。你的意思是,有没有0个。

如果没有附加的 ClassDate 记录,m.ClassDates 将是一个空列表。你想要 m.ClassDates.Count = 0 OrElse...