Помогите составить грамотное Linq выражение.
От: Аноним  
Дата: 05.10.10 07:45
Оценка:
допустим есть класс

class MyType
{
    public int ID { get; set; }
}


Нужно произвести поиск элементов в коллекции этих типов, где один из элементов может быть нулем. Из кода я думаю ясно, что я хочу. Выражение Linq в методе Find вызывает NullReference Exception.

private void simpleButton4_Click(object sender, EventArgs e) {
    IEnumerable<MyType> coll = new MyType[] {
        null,    // Внимание null
        new MyType() { ID = 1},
        new MyType() { ID = 2}
    };

    MyType pat1 = null;
    MyType found1 = Find(pat1, coll); // должен вернуть null

    MyType pat2 = new MyType() { ID = 3 };
    MyType found2 = Find(pat2, coll); // должнен вернуть null (NullReference Exception)

    MyType pat3 = new MyType() { ID = 1 };
    MyType found3 = Find(pat3, coll); // должен вернить второй элемент коллекции (NullReference Exception)
}
        
private MyType Find(MyType pattern, IEnumerable<MyType> coll)  {
    return coll.Where(x=> (pattern == null && x == null) || (pattern != null && pattern.ID == x.ID)).FirstOrDefault();
}


PS. На самом деле я создал метод (код не привожу), который правильно решает задачу, просто он получился достаточно сложным для такой простой задачи. Подозреваю можно как-то по-другому с Linq вывернуться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.