【发布时间】:2012-03-26 22:15:07
【问题描述】:
我在使用以下 Linq 查询时遇到问题(demandNb 是一个过滤选项,作为一个字符串):
Return (From auto In entity.DEMDT_AUTMT _
Where (String.IsNullOrEmpty(demandNb) OrElse auto.DEMND_NB = demandNb) _
Order By auto.NO_DEMND Descending _
Select auto).ToList()
如果过滤器字段为空,我的目标是获取对数据库的所有需求。如果有过滤器,则该函数应返回与过滤器匹配的所有需求。
目前,当我尝试使用 .ToList() 将 IQueryable 集合转换为列表时,会抛出以下错误:
Conversion from string "" to type 'Double' is not valid.
问题是,当 demandNb 等于 "" 时,这条指令auto.DEMND_NB = demandNb 还在执行,抛出转换错误。
当我在 OrElse 之后删除该部分时,一切正常(尽管这不是我想要的行为,但我希望过滤器毕竟可以工作!)。我还尝试将结果放入变量中(有效),然后将其转换为列表,并且仅在调用 .ToList() 时才会引发错误。奇怪...
有什么我没有看到,为什么OrElse 没有按预期工作?
编辑:
我将实现更多这样的过滤器字段(如需求所有者、需求日期等),因此在执行查询之前我无法验证过滤器是否为空
【问题讨论】:
标签: vb.net linq .net-4.0 ado.net