2013-08-22 47 views
4

我可能會錯誤地問這個問題,因爲我正在與Linq握手。我尋找了一個解決方案,我唯一想到的就是繼承是答案的可能性,但在這種情況下我無法解決如何使用它。我使用C#和已經創建了一個類的表:將多個表分配到linq表映射中的單個類

[Table(Name = "CommonDocumentData1800")] 
public class CommonDocumentRecordData 
{ 
    [Column] 
    public string RecordID; 
    [Column] 
    public int? StartYear; 
    [Column] 
    public int? EndYear; 
    [Column] 
    .... 
} 

我有多個表(例如CommonDocumentData1800,CommonDocumentData1900,CommonDocumentData2000),但我想使用相同的類,而不是一個不同的重複類名稱。我如何處理這個問題?

+2

我不認爲這個問題與'LINQ'有什麼關係。 –

+0

所有的表都有相同的字段? – Ehsan

+2

倒票有點不公平。我說我正在和Linq交手,我會認爲這是一個合理的問題。即使這與Linq無關,我仍然會讚賞解決問題的方法。 –

回答

0

您可以在linq查詢中包含多個枚舉類型。爲了填充您的CommonDocumentRecordData對象,您可以這樣做:

var allTables = (from t1800 in CommonDocumentData1800.AsEnumerable() 
       select new CommonDocumentRecordData 
       { 
       RecordID = t1800.Field<string>("RecordId"), 
       StartYear = t1800.Field<int>("StartYear"), 
       EndYear = t1800.Field<int>("EndYear") 
       }).Union(
       from t1900 in CommonDocumentData1900 
       //and so on 
       ); 
+0

如何將'CommonDocumentData1900'映射到模型中的某個類?這隻適用於如果你定義了許多相同結構的類,例如'CommonDocumentData1800','CommonDocumentData1900',...這不是OP想要的。 –

+0

有很多方法可以解決這個問題。這聽起來像這些是具有相同模式的邏輯分段表。處理這種問題的最簡潔的方式可能是在數據庫中查看。然後,如果您在視圖對象上創建模型,則不需要這些。如果您使用的是實體數據模型,它將爲您創建所有這些類,並且我猜如果您無法控制底層數據模型,則需要一些額外的邏輯來拼接它。 - 要回答你的觀點:同樣的模式不是必要的 - 因爲你可以在你的查詢中自定義屬性分配。 – mrtig

+0

@KingKing:我相信這是你以後可能會遇到的情況:http://blogs.msdn.com/b/adonet/archive/2007/03/15/inheritance-in-the-entity-framework.aspx In Entity數據模型,你可以定義'TableMappingFragment'來處理這種情況。 – mrtig

相關問題