2013-11-01 43 views
1

我試圖將繼承類型IEnumerable轉換爲基類的IEnumerable演員IEnumerable <Inherited>到IEnumerable <Base>

試過如下:

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

return test.ToList(); 

但得到錯誤:

You cannot convert these types. Linq to Entities only supports conversion primitive EDM-types.

的參與看起來像這樣的類:

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獲得記錄,結果爲IEnumerable<BookedResource>使用實體框架和LINQ。

UPDATE:

當使用鑄造接縫下面的工作,但試圖循環使用的foreach的數據丟失時。

resultFromDb.ToList() as IEnumerable<BookedResource>; 

更新2:

im使用生成的模型,模型(EDMX)實體框架是從數據庫中創建,EDMX包括reprecent數據庫表類。

在數據庫中我有一箇舊的BookedResource的歷史表,它可能會發生,用戶希望看到這些並從數據庫中獲取舊數據實體框架使用具有相同名稱的類來接收數據D b。所以我從HistoryBookedResource類中的表HistoryBookedResource接收數據。

因爲實體框架生成部分類的屬性我不知道我是否可以讓他們虛擬和覆蓋。

任何建議將不勝感激。

+1

有兩個完全相同的類'BookedResource'和'HistoryBookedResource'有什麼意義? – VladL

+0

您正在對資源進行投影,因此在執行投射後,您無法再讀取數據。 (你也不會從'IEnumerable '到'IEnumerable '你將從'IQueryable '到'IQueryable ') –

+0

這就是數據消失,但首先當我在foreach中使用它。你能否詳細說明你的意思是「陰影」,爲什麼它的IQueryable而不是IEnumerable? – MikeAlike234

回答

1

嘗試:

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

通常你在這種情況下使用AsEnumerable<T>

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

這並沒有立刻列舉了整個結果的優勢(你不鬆懶惰) 。

相關問題