我使用下面的语句的目的是从MachineList
集合(IEnumerable类型)中获取所有iMachineStatus
的机器对象。MachineList
集合并不总是包含状态为i的机器。
当没有机器有i的MachineStatus
时,我想返回一个空集合。我对ActiveMachines
的调用(首先使用)起作用,但InactiveMachines
不起作用。
public IEnumerable<Machine> ActiveMachines
{
get
{
return Customer.MachineList
.Where(m => m.MachineStatus == "a");
}
}
public IEnumerable<Machine> InactiveMachines
{
get
{
return Customer.MachineList
.Where(m => m.MachineStatus == "i");
}
}
编辑
经过进一步的检查,似乎任何
MachineList
的枚举都会导致随后的MachineList
枚举抛出一个execption:Object reference not set to an instance of an object
。因此,调用
ActiveMachines
或InactiveMachines
作为MachineList
集合的问题并不重要。这尤其麻烦,因为我可以通过在代码中调用MachineList
之前在监视中枚举它来中断对它的调用。在其最低级别MachineList
实现NHibernate.IQuery
作为IEnumerable
返回。什么原因导致在初始枚举之后MachineList
丢失其内容? 最佳答案
Where
如果没有匹配项,则返回一个空序列;这是一个完全有效的序列(非空)。获得空值的唯一方法是调用FirstOrDefault
或SingleOrDefault
。
你确定虫子在你想的地方吗?
int?[] nums = { 1, 3, 5 };
var qry = nums.Where(i => i % 2 == 0);
Console.WriteLine(qry == null); // false
Console.WriteLine(qry.Count()); // 0
var list = qry.ToList();
Console.WriteLine(list.Count); // 0
var first = qry.FirstOrDefault();
Console.WriteLine(first == null); // true