我使用下面的语句让所有的计算机对象从MachineList集合(IEnumerable类型)的原意,即具有的MachineStatus I 的。该ActiveMachines集合不会总是包含与机器的状态的 I 的。

有时在没有机具有的的 I 的一个InactiveMachines我想返回一个空的集合。我的呼叫到Object reference not set to an instance of an object(其用于第一)工作,但NHibernate.IQuery没有。

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");
    }
}

修改

在进一步的检查看来IEnumerable的任何枚举会造成后续<=>枚举抛出exeception:<=>

因此,它不会有一个呼叫作出<=>或<=>作为其与<=>收集的问题无关紧要。这是特别麻烦,因为我可以打破呼吁通过在观看枚举它这就是所谓的代码之前根本<=>。在最低水平<=>工具<=>返回作为<=>。是什么造成<=>初步统计后失去它的内容是什么?

有帮助吗?

解决方案

Where如果没有匹配,则返回一个空的序列;这是一个完全有效的序列(不为空)。你会得到一个空的唯一方法是,如果你打电话FirstOrDefaultSingleOrDefault

您确定错误是你认为它是什么?

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

其他提示

默认情况下, Enumerable.Where 已经不返回一个空IEnumerable<T>,不为null。 ,如果你看到“对象引用不设置到对象的实例。”例外,它最有可能是别的什么东西的问题。

时MachineList空,也许?如果你没有创造它,你会得到你的电话到异常.Where(...)

此外,如果你想明确地返回一个空的集合,这可以帮助...

Enumerable.Empty<Machine>();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top