2010-04-19 71 views
2

我在我的LINQ2SQL圖中有一個表,在表JourneyBooking中有一個名爲DayOfWeek的列。 designer.cs的定義如下:更改部分類中的LINQ2SQL屬性?

[Column(Storage="_DayOfWeek", DbType="TinyInt NOT NULL")] 
public int DayOfWeek 
{ 
    get 
    { 
     return this._DayOfWeek; 
    } 
    set 
    { 
     if ((this._DayOfWeek != value)) 
     { 
      this.OnDayOfWeekChanging(value); 
      this.SendPropertyChanging(); 
      this._DayOfWeek = value; 
      this.SendPropertyChanged("DayOfWeek"); 
      this.OnDayOfWeekChanged(); 
     } 
    } 
} 

我有一個JourneyBooking類的部分類。是否可以使用我自己的屬性來擴展/覆蓋上述DayOfWeek屬性?

我遇到的問題是DayOfWeek在C#中是0-6,但在SQL中是1-7,所以我想我可以覆蓋DayOfWeek屬性來減去或添加1,具體取決於它是get還是set ,這是可能的,還是我需要重寫我的部分類中的所有上述代碼?

回答

4

您可以更容易地在您的部分中編寫另一個屬性,只需在它的get/set中引用此屬性,然後在您的代碼中使用該屬性即可。例如,我會重新命名生成一個用於SQL喜歡的東西DayOfWeekStorageDayOfWeekSQL,然後在部分做到這一點:

public int DayOfWeek 
{ 
    get { return DayOfWeekStorage -1; } 
    set { DayOfWeekStorage = value + 1; } 
} 
+0

'public int DayOfWeek0 {get ...;設定...; }',但是你不能在查詢中使用它...... :(也許你可以創建一個表達式屬性來執行'-1'。 – leppie 2010-04-19 12:46:15

+0

@leppie - 也是一個好名字,無論對OP還是他們的團隊工作最有意義! – 2010-04-19 12:47:16

1

沒有與LINQ to SQL中有這樣做沒有真正的好辦法。

您可以創建一個DayOfWeekStorage屬性(如Nick Craver解釋的),使其成爲內部屬性,並定義一個新的WeekDay DayOfWeek屬性。當你在LINQ查詢中使用這個新屬性時,它甚至會被編譯。但是,這個LINQ查詢將在運行時失敗,因爲LINQ to SQL不知道如何將查詢轉換爲LINQ to SQL。這是LINQ to SQL停止的地方。

如果您無意在LINQ查詢中使用它(因此不需要基於該屬性進行過濾,分組和排序),則可以創建新屬性,但是在運行時偶然執行此操作並找出它。