Я, очевидно, не знаю, что я делаю. Этот материал MVC действительно дует мне в голову, пытаясь сохранить шаблон. Я слежу за учебниками MVC, а также с мега-гуглингом, и это тот уголок, в который я нарисовал себя.Неэффективный MVC ViewModel Создание нескольких вызовов в базе данных?
У меня есть несколько подобных частей данных, которые я пытаюсь получить. Я могу заставить свой код работать, но для меня это выглядит просто неэффективно, так как мы начинаем вытягивать большие записи из db из-за нескольких вызовов в db. Итак, у меня есть класс OrderSummary, внутри класса это:
public IEnumerable<Order> GetOrders()
{
var orders = (from s in db.Orders
where s.UserId == uId
select s);
return orders.ToList();
}
Тогда это:
public decimal GetGrossProfitTotal()
{
var orders = (from s in db.Orders
where s.UserId == uId
select s);
decimal? grossprofittotal = orders.Sum(s => s.Profit);
return grossprofittotal ?? decimal.Zero;
}
Таким образом, если мы примем, что последний кусок кода и скопировать его для totalcommission и netprofittotal, что в основном как у меня все сложилось. Я бы угадал четыре звонка в db?
Тогда в контроллере:
var ordersummary = new OrdersSummary();
var viewModel = new OrderSummary
{
Orders = ordersummary.GetOrders(),
GrossProfitTotal = ordersummary.GetGrossProfitTotal(),
CommissionTotal = ordersummary.GetCommissionTotal(),
NetProfitTotal = ordersummary.GetNetProfitTotal(),
};
return View(viewModel);
Это заставляет меня все данные мне нужно в представлении, так что я могу работать с ним. Для меня это кажется излишним излишним, и я предполагаю, что он неэффективен? Если вы запишете, что я также занимаюсь сортировкой и поиском парм, у вас много дублирующего кода linq. Похоже, что я должен быть в состоянии сделать что-то, чтобы консолидировать данные, как это:
var orders = (from s in db.Orders
where s.UserId == uId
select s).ToList();
decimal grossprofittotal = orders.Sum(s => s.Profit);
decimal commissiontotal = orders.Sum(s => s.Commission);
decimal netprofittotal = orders.Sum(s => s.Profit + s.Commission);
, а затем обернуть эти четыре части данных (список заказов, а также три десятичные значения) красиво в массиве (или любой другой) и отправить их на контроллер/просмотр. В представлении мне нужно иметь возможность прокручивать список заказов. Неужели я здесь? Или, что такое стандартная процедура здесь с MVC? Благодарю.
Спасибо, имеет смысл и звучит так, как будто мне нужно вернуться к фундаментальным принципам, а не думать о MVC как о совершенно новом жестком способе делать вещи.К сожалению, мои фундаментальные особенности являются пятнистыми, но я могу, по крайней мере, смотреть за рамки коробки и вообще знать, где найти ответы. Я очень ценю помощь. – SumNone