首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将IEnumerable<Inherited>转换为IEnumerable<Base>

将IEnumerable<Inherited>转换为IEnumerable<Base>
EN

Stack Overflow用户
提问于 2013-11-01 20:19:05
回答 2查看 1.5K关注 0票数 3

我正在尝试将继承类型的IEnumerable转换为基类的IEnumerable

已尝试如下:

代码语言:javascript
复制
var test = resultFromDb.Cast<BookedResource>();

return test.ToList();

但犯了错误:

不能转换这些类型。Linq到实体只支持转换基元EDM-类型。

所涉及的课程如下:

代码语言:javascript
复制
public partial class HistoryBookedResource : BookedResource
{
}

public partial class HistoryBookedResource
{
    public int ResourceId { get; set; }
    public string DateFrom { get; set; }
    public string TimeFrom { get; set; }
    public string TimeTo { get; set; }
}

public partial class BookedResource
{
    public int ResourceId { get; set; }
    public string DateFrom { get; set; }
    public string TimeFrom { get; set; }
    public string TimeTo { get; set; }
}

[MetadataType(typeof(BookedResourceMetaData))]
public partial class BookedResource
{
}

public class BookedResourceMetaData
{
    [Required(ErrorMessage = "Resource id is Required")]
    [Range(0, int.MaxValue, ErrorMessage = "Resource id is must be an number")]
    public object ResourceId { get; set; }

    [Required(ErrorMessage = "Date is Required")]
    public object DateFrom { get; set; }

    [Required(ErrorMessage = "Time From is Required")]
    public object TimeFrom { get; set; }

    [Required(ErrorMessage = "Time to is Required")]
    public object TimeTo { get; set; }
}

我试图解决的问题是从表HistoryBookedResource中获取记录,并使用实体框架和LINQ在IEnumerable<BookedResource>中获得结果。

更新:

当使用下面的转换接缝来工作时,但是当试图用预测循环时,数据就会丢失。

代码语言:javascript
复制
resultFromDb.ToList() as IEnumerable<BookedResource>;

更新2:

Im使用实体框架生成的模型,模型( edmx )是从数据库创建的,edmx包含表示数据库表的类。

在数据库中,我有一个旧BookedResource的历史表,用户可能希望查看这些表,并从数据库实体框架中获取旧数据,使用与表同名的类从db接收数据。因此,我从表HistoryBookedResource接收HistoryBookedResource类中的数据。

因为实体框架使用属性生成部分类,所以我不知道是否可以将它们变为虚拟类并覆盖它们。

如有任何建议,将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2013-11-01 20:26:21

通常在这种情况下使用AsEnumerable

代码语言:javascript
复制
var test = resultFromDb.AsEnumerable().Cast<BookedResource>();

这样做的好处是没有一次列举整个结果(你不会放松懒惰)。

票数 6
EN

Stack Overflow用户

发布于 2013-11-01 20:21:39

试着:

代码语言:javascript
复制
resultFromDb.AsEnumerable().Cast<BookedResource>();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19734739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档