为什么我会收到'InvalidCastException'

时间:2009-08-07 22:29:40

标签: wpf linq casting

private Incident incident = null;

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

我得到以下异常:

无法将类型为'System.Data.Linq.DataQuery`1 [WPF.Incident]'的对象强制转换为'WPF.Incident'。

我需要一个事件实例来像这样使用它:

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

3 个答案:

答案 0 :(得分:5)

尝试:

incident = rdc.Incidents.First(i => i.ID == ID);

答案 1 :(得分:4)

Where方法可以返回多个结果(可能不是在你的特定情况下,但在一般情况下它可以),所以你需要使用像Mehrdad所描述的First方法获得第一个(并且可能是唯一的)结果

答案 2 :(得分:1)

代码

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

返回一个序列IEnumerable<Incident>,你试图将其转换为Incident类型。这就是为什么你得到InvalidCastException,因为那些类型不兼容。正如Mehrdad所说,你可以使用First。但是,如果序列不包含任何元素,First将抛出异常。这可能是也可能不是所希望的。如果不需要异常,则可以调用DefaultOrEmpty,如果序列不包含任何元素,则会返回该类型的默认值。如果Incident是引用类型,则默认值为null,您应该在代码中添加空检查并适当处理该情况。