私は以下のステートメントを使用しています。MachineListを持つコレクション(タイプIEnumerable)MachineStatusの私。のMachineListコレクションには、常にステータスが次のマシンが含まれるわけではありません私。
どのマシンにも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欺瞞を投げる:Object reference not set to an instance of an object。
したがって、電話がかかってきたかどうかは関係ありません。ActiveMachinesまたはInactiveMachinesその問題としてMachineListコレクション。私はに電話を切ることができるのでこれは特に厄介ですMachineListコードで呼び出される前に、単にWatchでそれを列挙することによって。最低レベルMachineList実装するNHibernate.IQueryとして返されるIEnumerable。原因は何ですかMachineList最初の列挙後にその内容を失うのですか?
Where一致がない場合は空のシーケンスを返します。これは完全に有効なシーケンスです(nullではありません)。あなたがnullを取得する唯一の方法はあなたが呼び出す場合です。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
さらに、空のコレクションを明示的に返したい場合は、これが役立ちます。
Enumerable.Empty<Machine>();
MachineStatus例外をスローしているファサードプロパティです - すなわちpublic string MachineStatus { get {return someInnerField.Status;}}そしてsomeInnerFieldですnull。 - Marc Gravell♦IEnumerable複数回。消費するときに同意する暗黙の契約IEnumerable一度だけ列挙することです。だから、本当の答えはあなたの同僚が複数の列挙を許すように彼のコードを変更することではありません、しかしあなたがするためにCustomer.MachineList.ToList()ある時点で、その後は結果のリストのみを使用します(または、新しいリストを取得します。IEnumerable再び)。あなたは怠惰な評価をすることができます。キャッシュすることはできますが、2回列挙しないでください。を公開することもできますIQueryableそしてそれも複数回呼び出します。 - ErikE