Я создаю проект 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.