关于使用LINQ的OOP类结构的基本问题

时间:2010-10-15 19:49:59

标签: c# linq oop .net-3.5

我遇到这种情况:

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,我可以通过链接轻松完成此操作(一行)。

但是当我调用使用对象属性时,我必须这样做:

busOrder openOrder = new busOrder(someId);

然后我必须这样做才能获得列:

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

有没有办法让我更容易访问这些值(比如openOrder.Date,而无需在课程中逐个手动创建和设置它们?

3 个答案:

答案 0 :(得分:1)

您可以使用AutoMapper复制对象之间的属性值。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

我所知道的并不容易。当我必须这样做的时候,我通常只是手工写出第一个属性,然后复制并粘贴风暴。

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