Wyświetlenie sumy zamówień z danego miesiąca

0

Cześć wszystkim.Chciałbym wyświetlić sumę zamówień z danego miesiąca w ASP.NET MVC:
Moja tabela Order wygląda następująco:
DateCreated | TotalPrice
2017-02-06 | 400
2017-02-06 | 300
2017-03-06 | 100
2017-03-06 | 50

Chciałbym uzyskać sumę miesięczną zamówień tak jak poniżej:
DateCreated | TotalPrice
2017-02 | 700
2017-03 | 150

Mój kod wygląda następująco:

  public ActionResult ListOrder()
        {
            var result = from s in db.Orders
                         group s by new { date = new DateTime(s.dateCreated.Year, s.dateCreated.Month, 1) } into g
                         select new Order
                         {
                             dateCreated = g.Key.date,
                             totalPrice = g.Sum(x => x.totalPrice)
                         } ;
            return View(result);
        }

Mój widok:

 @model IEnumerable<Sklep_Internetowy.Models.Order>
@{
    ViewBag.Title = "ListOrder";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Suma zamówień z danego miesiąca</h2>



 <table style="width:100%">
 @foreach(var item in Model)
 { 
  <tr>
    <td>@item.totalPrice</td>
    <td>@item.dateCreated</td>
  
  </tr>
 }
</table>
        

Mój komunikat o błędzie:

An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
Additional information: Only parameterless constructors and initializers are supported in LINQ to Entities.

Ma ktoś, może jakiś pomysł jak to rozwiązać? Na początku dane te chciałbym przedstawić w tabelce, a docelowo później zamierzam stworzyć wykres na którym wyświetlona zostanie całkowita sumę zamówień z danego miesiąca tak jak na tym zdjęciu:
chart.PNG

1

Przecież masz podany wyraźny komunikat błędu: "Only parameterless constructors and initializers are supported in LINQ to Entities". Konstruujesz datę z parametrami.

1
var result = from s in db.Orders group s by 
new {  Year = s.dateCreated.Year, Month =  s.dateCreated.Month, Day = 1} 
into g
select new Order
{
   dateCreated = new DateTime(g.Key.Year, g.Key.Month, g.Key.Day),
   totalPrice = g.Sum(x => x.totalPrice)
 } ;
0

Po wielu próbach udało mi się stworzyć wykres z pomocą google api. Mam tylko jeden problem z prawidłowym wyświetleniem daty.
chart4.PNG
Controller zwaraca do widoku prawidłowe dane:
json.PNG

Mój kod z widoku:


@{
    ViewBag.Title = "Test";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Test</h2>


<script src="~/Scripts/jquery-1.10.2.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<style>
    #chart_display {
        height: 400px;
        width: 650px;
    }
</style>
<script>
 
    google.load("visualization", "1", { packages: ["corechart"] });
</script>
<script>
    var chartData;
    
    $(document).ready(function () {
        $.ajax({
            url: "/Manage/ListOrder",
            data: "{}",
            dataType: "json",
            type: "POST",
            contentType: "application/json; chartset=utf-8",
            success: function (data) {
                debugger;
                chartData = data;

                var data = new google.visualization.DataTable();
               
                data.addColumn('string', 'Miesiąc');
                data.addColumn('number', 'Suma mięsięcznych zamówień');
                //var monthYearFormatter = new google.visualization.DateFormat({
                //    pattern: "MMM yyyy"
                //});
                //monthYearFormatter.format(data, 0);
               
                for (var i = 0; i < chartData.length; i++) {
                    data.addRow([chartData[i].dateCreated, chartData[i].TotalPrice]);
                }
                
               
                var chart = new google.visualization.ColumnChart(document.getElementById('chart_display'));
                chart.draw(data,
                      {
                          title: " ", 
                          position: "top",
                          fontsize: "14px",
                          chartArea: { width: '50%' },
                      });
            },
          
            error: function () {
                alert("Błąd wczytywania danych! Proszę sprubuj ponownie.");
            }
        });
    });
</script>

<div class="container">
    <div class="panel panel-info">
        <div class="panel-heading">
           Wykres
        </div>
        <div class="panel-body">
            <div id="chart_display"></div>
        </div>
       
    </div>
</div>

 

Przy zmianie wartości z string na datetime wykres się nie wyświetla.

data.addColumn('datetime', 'Miesiąc');
                data.addColumn('number', 'Suma mięsięcznych zamówień');
                //var monthYearFormatter = new google.visualization.DateFormat({
                //    pattern: "MMM yyyy"
                //});
                //monthYearFormatter.format(data, 0);
               
                for (var i = 0; i < chartData.length; i++) {
                    data.addRow([chartData[i].dateCreated, chartData[i].TotalPrice]);
                }
                
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1