Vb.net 意外';OrElse';Linq查询中的行为
我在以下Linq查询中遇到问题(demandNb是一个过滤器选项,作为字符串): 我的目标是在筛选字段为空时获取数据库的所有需求。如果存在筛选器,则函数应返回与筛选器匹配的所有请求 当前,当我尝试使用.ToList()将IQueryable集合转换为列表时,会引发以下错误:Vb.net 意外';OrElse';Linq查询中的行为,vb.net,linq,.net-4.0,ado.net,Vb.net,Linq,.net 4.0,Ado.net,我在以下Linq查询中遇到问题(demandNb是一个过滤器选项,作为字符串): 我的目标是在筛选字段为空时获取数据库的所有需求。如果存在筛选器,则函数应返回与筛选器匹配的所有请求 当前,当我尝试使用.ToList()将IQueryable集合转换为列表时,会引发以下错误: Conversion from string "" to type 'Double' is not valid. 问题是,当demandNb等于“”时,此指令仍在执行,引发转换错误 当我在OrElse之后移除部件时,一切正
Conversion from string "" to type 'Double' is not valid.
问题是,当demandNb等于“”时,此指令仍在执行,引发转换错误
当我在OrElse之后移除部件时,一切正常(虽然这不是我想要的行为,但我希望过滤器能够正常工作!)。我还尝试将结果放入一个变量(可以工作),然后将其转换为一个列表,只有在调用.ToList()时才会抛出错误。威德
是否有我没有看到的东西,为什么OrElse
不能按预期工作
编辑:
我将实现多个类似这样的过滤器字段(如需求所有者、需求日期等),因此在执行查询之前无法验证过滤器是否为空如果必须猜测,我会说
auto.DEMND\u NB
类型为Double
,而demandNb
显然是一个字符串。这与OrElse
无关:您只是尝试比较两个不兼容类型的值
由于demandNb
的值不与数据中的每一行相关联,我建议这样做(请原谅C):
DEMND_NB是一个整数(缺少CInt是如此明显,我没有看到它)。虽然,当demandNb为空或null时,表达式的另一部分根本不应该被计算,但它确实是,这让我感到困惑。@Msonic:你说的是代码的编译时计算,它总是会知道变量的声明类型,所以即使运行时执行从未达到这一点,你仍然会遇到编译错误。哦,我不知道。谢谢!
Conversion from string "" to type 'Double' is not valid.
var autos = entity.DEMDT_AUTMT;
if(!string.IsNullOrEmpty(demandNb))
{
var demandNbDouble = double.Parse(demandNb);
autos = autos.Where(auto => auto.DEMND_NB == demandNbDouble);
}
autos = autos.OrderBy(...);