Asp.net mvc 多行where子句

Asp.net mvc 多行where子句,asp.net-mvc,vb.net,entity-framework,linq-to-entities,Asp.net Mvc,Vb.net,Entity Framework,Linq To Entities,我有一个包含多个输入文本字段的搜索页面。这些输入可能是空的,也可能不是空的,这取决于用户正在搜索的内容 为了适应这一点,我创建了一个基本的searchQuery对象,该对象提取所有正确的关系,然后使用searchQuery.Where函数为每个非空输入修改查询 如果在WHERE子句中放置多个条件,则会出现以下错误: 无法比较“System.Collections.Generic.ICollection”“1”类型的元素。仅支持基元类型、枚举类型和实体类型 我知道代码看起来很时髦,但我试图格式化它

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

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

如果在WHERE子句中放置多个条件,则会出现以下错误:

无法比较“System.Collections.Generic.ICollection”“1”类型的元素。仅支持基元类型、枚举类型和实体类型

我知道代码看起来很时髦,但我试图格式化它,这样你就不必水平滚动就能看到所有内容

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

searchQuery = searchQuery.Where(Function(m) (
                            (absoluteMinimumDate < m.ClassDates.OrderBy(Function(d) d.Value).FirstOrDefault.Value)
                                                         )
                                            )
这个很好用


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

where中的多条件不是问题所在。m、 ClassDates是Nothing,它永远不会为真,在SQL术语中也没有意义。无法转换与此记录关联的ClassDate集是否为空?转换为SQL。你的意思是,它们有0个吗


如果没有附加的ClassDate记录,则m.ClassDates将是一个空列表。您希望m.ClassDates.Count=0或与您的问题无关,但什么都并没有的是m.ClassDates@比约恩·罗格克林:这只是我想申请的条件之一。我发现错误发生在存在多个条件时,而这恰好是第一个条件。只是想简化在这里发布的代码。@Bjørn RogerKringsjå:而且,我总是将常量放在比较的左侧。这样,当我使用VB这样的语言时,使用=作为双用途运算符相等比较器和赋值,像a=1这样的语句可能会令人困惑,并导致意外的结果,而1=a则不会留下歧义和意外的结果。旧的JavaScript技巧,即,是的,hrmmm。@ChrisPratt:我不知道。我15年前在VB6中开始做这件事——在我写js.Ah之前。我是根据对象而不是SQL来思考的。谢谢。它在对象中在语法上是有效的,但即使有m.ClassDates也不应该是空的——您的实体应该有构造函数,将它们初始化为ICollection.com的某个实现的空实例。事情并不总是理想的。我试图解释一个我可以预见的非理想案例的一个例子。无聊的。没什么大不了的。你的建议解决了这个问题,我对此感到高兴。
searchQuery = searchQuery.Where(Function(m) (
                            (absoluteMinimumDate < m.ClassDates.OrderBy(Function(d) d.Value).FirstOrDefault.Value)
                                                         )
                                            )