Основной вопрос о структуре классов ООП с помощью LINQ - PullRequest
2 голосов
/ 15 октября 2010

У меня такая ситуация:

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 - это таблица в моем тексте данных , и конструктор "заполняет" vOrder, и я могу сделать это очень легко с помощью ссылки (одна строка).

Но когда я звоню, чтобы использовать атрибуты объектов, я должен сделать это так:

busOrder openOrder = new busOrder(someId);

тогда я должен сделать это, чтобы получить столбцы:

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

Можно ли как-нибудь сделать эти значения более доступными (например, openOrder.Date, без необходимости вручную создавать и устанавливать их по одному в классе?

Ответы [ 3 ]

1 голос
/ 15 октября 2010

Вы также можете использовать Dynamic Language Runtime.

EDIT: Хорошо, если вы используете .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;
    }
}
1 голос
/ 15 октября 2010

Вы можете использовать AutoMapper для копирования значений свойств между объектами.

0 голосов
/ 16 октября 2010

Нет простого пути, о котором я знаю.Когда мне приходилось это делать, я обычно просто записывал первое свойство вручную, а затем копировал и вставлял шторм.

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