[英]Cast IEnumerable<Inherited> To IEnumerable<Base>
我正在尝试将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
获取记录,并使用Entity Framework和LINQ将结果放在IEnumerable<BookedResource>
。
更新:
使用以下时,可以使用转换接缝,但在尝试使用foreach循环时数据会丢失。
resultFromDb.ToList() as IEnumerable<BookedResource>;
更新2:
我使用实体框架生成模型,模型(edmx)是从数据库创建的,edmx包括表示数据库表的类。
在数据库中,我有一个旧BookedResource的历史表,并且可能发生这样的情况:用户想要查看这些并从数据库实体框架获取旧数据使用与表同名的类来从db接收数据。 所以我从HistoryBookedResource类中的表HistoryBookedResource接收数据。
因为实体框架生成具有属性的部分类,我不知道是否可以使它们成为虚拟和覆盖。
任何建议将不胜感激。
通常,在这种情况下使用AsEnumerable<T>
:
var test = resultFromDb.AsEnumerable().Cast<BookedResource>();
这样做的好处是不会立刻枚举整个结果(你不会失去懒惰)。
尝试:
resultFromDb.AsEnumerable().Cast<BookedResource>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.