将IEnumerable <inherited>转换为IEnumerable <base /> </inherited>

时间:2013-11-01 20:19:05

标签: c# asp.net-mvc linq entity-framework

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

尝试了以下内容:

var test = resultFromDb.Cast<BookedResource>();

return test.ToList();

但是得到错误:

  

您无法转换这些类型。 Linq to Entities仅支持转换原始EDM类型。

所涉及的课程如下所示:

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>中。

更新:

使用以下版本时,可以使用转换接缝,但在尝试使用foreach循环时数据会丢失。

resultFromDb.ToList() as IEnumerable<BookedResource>;

更新2:

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

在数据库中,我有一个旧BookedResource的历史表,并且可能发生这样的情况:用户想要查看这些并从数据库实体框架获取旧数据,使用与表同名的类来从db接收数据。所以我从HistoryBookedResource类中的表HistoryBookedResource接收数据。

因为实体框架生成具有属性的部分类,我不知道我是否可以将它们设置为虚拟和覆盖。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

通常在这种情况下使用AsEnumerable<T>

var test = resultFromDb.AsEnumerable().Cast<BookedResource>();

这样做的好处是不会立刻枚举整个结果(你不会失去懒惰)。

答案 1 :(得分:1)

尝试:

resultFromDb.AsEnumerable().Cast<BookedResource>();