Почему я получаю «InvalidCastException» - PullRequest
0 голосов
/ 08 августа 2009
private Incident incident = null;

incident = (Incident)(rdc.Incidents.Where(i => i.ID == ID));

Я получаю следующее исключение:

Невозможно привести объект типа «System.Data.Linq.DataQuery`1 [WPF.Incident]» к типу «WPF.Incident».

Мне нужен экземпляр Incident, чтобы использовать его следующим образом:

IList listInjury = ((IListSource)incident.Incident_Injuries.OrderBy(m => m.Employee.LastName)).GetList();

Ответы [ 3 ]

5 голосов
/ 08 августа 2009

Попробуйте:

incident = rdc.Incidents.First(i => i.ID == ID);
4 голосов
/ 08 августа 2009

Метод Where может возвращать несколько результатов (возможно, не в вашем конкретном случае, но в общем случае это возможно), поэтому вам нужно получить первый (и предположительно только) результат с методом First, как описано Мехрдадом

1 голос
/ 08 августа 2009

код

(Incident)(rdc.Incidents.Where(i =>i.ID == ID))

возвращает последовательность, IEnumerable<Incident>, и вы пытаетесь привести ее к типу Incident. Вот почему вы получаете InvalidCastException, потому что эти типы несовместимы. Как предложил Мехрдад, вы можете использовать First. Однако First выдаст исключение, если последовательность не содержит никаких элементов. Это может или не может быть желательным. Если исключение нежелательно, вы можете вызвать DefaultOrEmpty, который будет возвращать значение по умолчанию для этого типа, если последовательность не содержит элементов. Если Инцидент является ссылочным типом, значением по умолчанию будет ноль, и вам следует добавить нулевую проверку в ваш код и соответствующим образом обработать этот случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...