2010-10-15 55 views
2

基本的問題,我有這種情況:約OOP階層結構與LINQ

public class busOrder: IbusOrder 
{ 
    public Order vOrder { get; set; } 

    MyDataContext db = new MyDataContext(); 

    public busOrder(int pOrderId) 
    { 
     vOrder = db.Orders.SingleOrDefault(p => p.Id == pOrderId); 
    } 

    public int SaveNew() 
    { 
     ... 
    } 
    public int GetStatus() 
    { 
     ... 
    } 
} 

正如你可能已經注意到,Order中,列出了我的的datacontext和構造「填充」 vOrder,我能做到這一點非常容易與鏈接(一行)。

但是當我打電話給使用對象atributes我必須做這樣的:

busOrder openOrder = new busOrder(someId); 

那麼我這樣做是爲了獲得列:

openOrder.vOrder.Date; 
openOrder.vOrder.Status; 

是有沒有辦法讓我更容易訪問這個值(如openOrder.Date,而不必手動創建並在類中逐個設置它們?

+0

不要挑剔,但只是作爲參考,通常類名和屬性是C#中的Pascal。 – 2010-10-15 20:28:14

+1

對象模型問題?你確定'Order'不應該是'busOrder'擴展的抽象類嗎? – 2010-10-15 20:40:20

回答

1

您也可以使用動態語言運行時。

編輯:那麼,如果你正在使用.NET 4.0,你可以實現這樣的事情:

class Program 
{ 
    static void Main(string[] args) 
    { 
     dynamic order = new BusOrder(); 
     Console.WriteLine(order.Test); 
     Console.ReadLine(); 
    } 
} 

class BusOrder : DynamicObject 
{ 
    private Order _order = new Order(); 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     result = _order.GetType().GetProperty(binder.Name).GetValue(_order, null); 

     return true; 
    } 
} 
+0

詳細說明,最好使用示例代碼。 – 2010-10-15 20:36:13

1

您可以使用AutoMapper複製對象之間的屬性值。

0

有沒有簡單的方法,我知道的。當我不得不這樣做時,我通常只是手動寫出第一個屬性,然後複製並粘貼一個風暴。

public int Status 
{ 
    get { return this.vOrders.Status; } 
    set { this.vOrders.Status = value; } 
}