C# LinqToSql的遗传与多态性

C# LinqToSql的遗传与多态性,c#,linq-to-sql,C#,Linq To Sql,我有一个名为BaseEvent的基类 以及从BaseEvent派生的3个类:Derived1、Derived2、Derived3 假设我们有以下查询: Database.BaseEvents.Where(e => e.EventsCategories.Any( c => c.EventCategories== category.OID)).ToList(); 如何使此查询返回派生对象的集合,而不是BaseEvent 谢谢 更新: 但是类型应该是胶片使用投射方法:

我有一个名为
BaseEvent
的基类
以及从
BaseEvent
派生的3个类:
Derived1、Derived2、Derived3

假设我们有以下查询:

Database.BaseEvents.Where(e => e.EventsCategories.Any(
        c => c.EventCategories== category.OID)).ToList();
如何使此查询返回派生对象的集合,而不是BaseEvent

谢谢

更新:


但是类型应该是
胶片

使用
投射
方法:

Database.BaseEvents.Where(e => e.EventsCategories.Any(
    c => c.EventCategories== category.OID)).Cast<DerivedType>().ToList();
Database.BaseEvents.Where(e=>e.EventsCategories.Any)(
c=>c.EventCategories==category.OID)).Cast().ToList();
假设是这样,您已经设置了Linq2Sql,以便它了解您的
EventCategories
属性是一个

更新:
鉴别器字段根据字段的值告诉Linq2Sql应该使用什么类型。如果未设置此字段。Linq2Sql将始终返回基类型。A将为您提供大量关于如何执行此操作的好帖子。

您可以使用OfType方法:

Database.BaseEvents.Where(e => e.EventsCategories.Any(
    c => c.EventCategories== category.OID)).OfType<Derived1>.ToList();
Database.BaseEvents.Where(e=>e.EventsCategories.Any)(
c=>c.EventCategories==category.OID)),类型为.ToList();

将从注释中仅返回Derived1类型

,我看到集合中可以有不同类型的派生对象


在这种情况下,没有任何理由将集合强制转换为某个特定的派生类型,只需返回basetype的集合,就像现在一样。但是,该集合中的每个real对象都有具体类型的
Derived1
Derived2
Derived3

但是,我不知道将返回什么对象。假设此查询返回2个对象:derived1和derived2。如果有一些BaseEvents是DerivedType2,但不是DerivedType2,则Cast将引发异常DerivedType@user348173在那种情况下,你不能那样做。若您想包含不同类型的对象列表,那个么应该将该列表类型化为它们的公共父类型,这就是所谓的polymorphism@ArchegCast不会抛出,如果类型不能按请求进行转换,它将返回
null
。@MarnixvanValen从这里开始:如果无法将元素转换为类型TResult,此方法将引发异常。要仅获取可以转换为类型TResult的元素,请使用OfType方法而不是转换(IEnumerable)。“否,此查询返回我BaseEvent。请看问题中的图片,please@user348173:那么该列表的内容是什么?如何创建和填充该列表?能否提供一个代码示例,说明该数组应如何硬编码?例如:列表{2,3,5,7}有4个整数:2,3,5,7正如我前面回答的,您需要设置一个鉴别器字段,告诉Linq2Sql要使用的派生类型。