Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
.net 如何使用Linq查询避免什么都不做?_.net_Vb.net_Linq - Fatal编程技术网

.net 如何使用Linq查询避免什么都不做?

.net 如何使用Linq查询避免什么都不做?,.net,vb.net,linq,.net,Vb.net,Linq,我想用Linq查询对象列表。在某些情况下,我会出现以下错误: The sequence contains no elements. Object reference not set to an instance of an object 我的Linq查询: MyList.Where(Function(s) Month(s.Histo_Date) = Month(Date_Reference) - 1 And Year(s.Histo_Date) = Year(Date_Reference))

我想用Linq查询对象列表。在某些情况下,我会出现以下错误:

The sequence contains no elements.
Object reference not set to an instance of an object
我的Linq查询:

MyList.Where(Function(s) Month(s.Histo_Date) = Month(Date_Reference) - 1 And Year(s.Histo_Date) = Year(Date_Reference)).Average(Function(s) s.Nb_Doc)
经过几次搜索后,我添加了以下内容:DefaultIfEmpty()

现在我有以下错误:

The sequence contains no elements.
Object reference not set to an instance of an object

如何使用Linq查询避免什么都不做?我喜欢将Linq查询的结果设置为0,如果结果为空,则将字符串设置为空。

您可以尝试在
Average
函数中检查where部分是否为
Nothing

MyList.Where(Function(s) Month(s.Histo_Date) = Month(Date_Reference) - 1 And Year(s.Histo_Date) = Year(Date_Reference)).DefaultIfEmpty().Average(Function(s) If(s Is Nothing, 0, s.Nb_Doc))

DefaultIfEmpty
具有重载,该重载采用“默认”值。
然后,通过在
DefaultIfEmpty
之前添加
Select
,您无需检查null或创建
s
的“空”实例

Dim avg=MyList.Where(函数月(历史日期)=月(日期参考)-1年(历史日期)=年(日期参考))。
选择(功能s.Nb_文件)。
DefaultIfEmpty(0)。
平均值()
非相关通知:
使用
代替
是位运算符,始终执行比较的两个部分。其中
在第一部分出现故障时,也只执行第一部分

实际上,您可以删除
,并使用两个Where方法,这两个方法几乎没有什么可读性/易懂性

Dim monthReference=月份(日期\u参考)-1
Dim yearReference=年份(日期\参考)
Dim avg=我的列表,其中(函数月份(历史日期)=月份参考)。
其中(功能年(历史日期)=年参考)。
选择(功能s.Nb_文件)。
DefaultIfEmpty(0)。
平均值()

感谢您的解释,非常有用,但我如何能在VS2010上为我的Linq查询提供相同的缩进?应该在VS2010中工作。记住,保持点在原来的行。我接受你的答案,对我来说是更有用的答案。