Как установить сложные свойства ViewModel - PullRequest
0 голосов
/ 22 марта 2020

Я создаю проект MVC, в котором мне нужно представить сложное представление - модель, которую мне нужно показать, выглядит следующим образом (класс заказов) -

 public class Orders
{
    public int SalesOrderID { get; set; }
    public string SalesOrderNumber { get; set; }
    public Customer Customer { get; set; }
    public List<OrderItems> OrderItems { get; set; }

}

public class OrderItems
{
    public Product Product { get; set; }

    public int Quantity { get;set; }

    public double UnitPrice { get; set; }
}

В указанных выше классах клиент и сам продукт - сгенерированные классы, а UnitPrice, количество - свойства другого сгенерированного класса SalesOrderDetail. Теперь в методе, в котором я возвращаю список заказов, я запутался, как установить свойства Customer и OrderItems (свойства Product, UnitPrice и Quantity в классе OrderItems). Отношение между Order и Customer составляет 1 - 1, каждый Order имеет CustomerID (поэтому я хочу привлечь Клиента, используя этот CustomerID). а между Order и OrderItems 1 - много, каждый Order имеет список OrderItems. Order - это представление сгенерированного класса SalesOrderHeader, который имеет свойство CustomerID, и класс SalesOrderDetail, который имеет свойство SalesOrderID, которое является идентификатором (первичным ключом) для SalesOrderHeader. OrderItems является представлением SalesOrderDetail, у которого есть свойство ProductId (с помощью которого я хочу привести Product)

Что я хочу сделать, это -

var Orders = db.SalesOrderHeaders.Select(s => new Orders()
            {
                SalesOrderID = s.SalesOrderID,
                Customer = db.Customers.Where(a => a.CustomerID==s.CustomerID).FirstOrDefault() *<the code here is giving me error>*,
                SalesOrderNumber = s.SalesOrderNumber
               OrderItems = *(how to use SalesOrderId property to get OrderItems which in turn has to set properties in its class)*

            });
            return Orders;
        }

Пожалуйста, предоставьте предложение без автомпера, как я Я не использовал его и хочу добавить эти вещи позже (другие вещи, такие как хранилище и т. д. c)

Обновление - в настоящее время я делаю это -

  var Products = db.SalesOrderDetails.Select(a => a.Product);
    var UnitPrice = db.SalesOrderDetails.Select(a => a.UnitPrice);
    var Quantity = db.SalesOrderDetails.Select(a => a.OrderQty);
    var Customers = db.Customers;

    var SalesOrderHeaders = db.SalesOrderHeaders;
    var SalesOrderDetail = db.SalesOrderDetails;
    var Orders = new List<Orders>();



    foreach (SalesOrderHeader o in SalesOrderHeaders)
    {
        Orders a = new Orders();
        a.SalesOrderID = o.SalesOrderID;
        a.SalesOrderNumber = o.SalesOrderNumber;
        a.CustomerID = o.CustomerID;

        List<OrderItems> Items = new List<OrderItems>();
        a.OrderItems = Items;
        foreach (SalesOrderDetail s in SalesOrderDetail.Where(s => s.SalesOrderID == o.SalesOrderID))
        {
            OrderItems Item = new OrderItems();
            Item.ProductID = s.ProductID;
            Item.Quantity = s.OrderQty;
            Item.UnitPrice = s.UnitPrice;
            Items.Add(Item);
        }

        Orders.Add(a);
    }

        return Orders;

Но проблема с этим Я должен был изменить свой класс OrderItems, чтобы он содержал ProductID, а не product, и Order to Container CustomerID, а не Customer. Во время выполнения я получаю список заказов правильно даже с клиентом и продуктом, но client.GetAsyn c выдает мне внутреннюю ошибку сервера 500.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...