2010-10-15 57 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; } 
}