Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 意外';OrElse';Linq查询中的行为_Vb.net_Linq_.net 4.0_Ado.net - Fatal编程技术网

Vb.net 意外';OrElse';Linq查询中的行为

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之后移除部件时,一切正

我在以下Linq查询中遇到问题(demandNb是一个过滤器选项,作为字符串):

我的目标是在筛选字段为空时获取数据库的所有需求。如果存在筛选器,则函数应返回与筛选器匹配的所有请求

当前,当我尝试使用.ToList()将IQueryable集合转换为列表时,会引发以下错误:

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(...);