我有一个包含多个输入(文本字段)的搜索页面。这些输入可能为空,也可能不为空 - 取决于用户搜索的内容。
为了适应这种情况,我创建了一个基础searchQuery
对象,它引入了所有正确的关系,然后对于每个非空输入,我使用searchQuery.Where
函数修改查询。
如果我在WHERE子句中放置多个条件,我会收到以下错误:
无法比较类型&System; Series.Collections.Generic.ICollection`1'的元素。仅支持基本类型,枚举类型和实体类型。
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)
)
)
这个工作正常
那么,我做错了什么?如何在子句中创建多条件?
答案 0 :(得分:1)
Where
中的多个条件不是问题。 m.ClassDates Is Nothing
将永远不会成为现实,并且在SQL术语中没有意义。你不能翻译“与此记录关联的ClassDates是否为NULL?”进入SQL。你的意思是,有0个。
如果没有附加的ClassDate
条记录,m.ClassDates
将是一个空列表。你想要m.ClassDates.Count = 0 OrElse...