Можно ли колонки как строки с помощью Linq и показать на View? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть таблица с названием Fuel и данные отображаются в таблице как

Name   | OrderDate | Qty
H&S1   | 1/1/2008  | 100
H&S1   | 1/2/2008  | 200
H&S1   | 2/2/2008  | 350
H&S2   | 2/28/2008 | 220
H&S2   | 3/12/2008 | 250
H&S2   | 3/15/2008 | 2150

, и я хочу показать как Результат на Просмотр

Name| Jan- 2008 | Feb- 2008 | Mar - 2008| Total
1       | 100       | 350       |  250  | 700
2       | 200       | 220       | 2150  | 2170

и IActionResult - это

public IActionResult GetRes()
        {
            List<CustData> myList = GetCustData();

            var query = myList
                .GroupBy(c => c.Name)
                .Select(g => new {
                    CustId = g.Key,
                    Jan = g.Where(c => c.OrderDate.Month == 1).Sum(c => c.Qty),
                    Feb = g.Where(c => c.OrderDate.Month == 2).Sum(c => c.Qty),
                    March = g.Where(c => c.OrderDate.Month == 3).Sum(c => c.Qty)
                });
            return View(myList);
        }

. Теперь я хочу показать эти данные в представлении. Может ли кто-нибудь подсказать мне, как отобразить этот формат в View.как это

Name| Jan- 2008 | Feb- 2008 | Mar - 2008| Total
1       | 100       | 350       |  250  | 700
2       | 200       | 220       | 2150  | 2170

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете создать модель представления для этого и агрегировать, введя новое свойство:

public class SomeVM
{

   public int CustId { get; set; }    
   public int Jan { get;set; }
   public int Feb { get;set; }
   public int Mar { get;set; }
   public int Total { get { return Jan + Feb + Mar;}  }

}

и затем в своем запросе linq:

.Select(g => new SomeVM {
                CustId = g.Key,
                Jan = g.Where(c => c.OrderDate.Month == 1).Sum(c => c.Qty),
                Feb = g.Where(c => c.OrderDate.Month == 2).Sum(c => c.Qty),
                March = g.Where(c => c.OrderDate.Month == 3).Sum(c => c.Qty)
            });

Вы даже можете улучшить свой linqзапрос с использованием свойства GroupBy для Month.

Более лучшим подходом может быть введение Enum для месяца:

public class SomeVM
{

   public int CustId { get; set; }    
   public List<FuelQuantity> FuelQuantities { get; set; }
   public int Total { get; set; }

   SomeVM()
   {
      FuelQuantities = new List<FuelQuantity>();
   }

}

, и FuelQuantity будет выглядеть следующим образом:

public class FuelQuantity
{
   public FuelMonth Month { get; set; }
   public int Quantity { get; set; }
}

в то время как ваш FuelMonth будет выглядеть следующим образом:

public enum FuelMonth : int
{
   January = 1,
   February = 2,
   ..........
   ..........
}

Ваш запрос linq также необходимо будет скорректировать, чтобы заполнить эту коллекцию, а затем заполнить итоговое значение.

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