[英]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.