多行where子句

时间:2015-02-19 20:45:43

标签: asp.net-mvc vb.net entity-framework linq-to-entities

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

为了适应这种情况,我创建了一个基础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)
                                                         )
                                            )

这个工作正常

那么,我做错了什么?如何在子句中创建多条件?

1 个答案:

答案 0 :(得分:1)

Where中的多个条件不是问题。 m.ClassDates Is Nothing将永远不会成为现实,并且在SQL术语中没有意义。你不能翻译“与此记录关联的ClassDates是否为NULL?”进入SQL。你的意思是,有0个。

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