2016-01-19 4 views
1

Я использую ASP.NET MVC 5 EF 6. Я применил логику для создания отчета, который показывает все продажи за выбранный месяц за каждый день. Кажется, он работает нормально в течение нескольких дней. Но позже я внес некоторые изменения. Теперь он не показывает дату в порядке. Я проверил и не смог найти ошибку. Пожалуйста, ребята, проверьте это и сообщите мне, где я ошибся?ASP.NET MVC: продажи каждый день в месяц

Мой контроллер

public ActionResult MonthlySalesByDate(string _year, string _month) 
    { 
     //assign incoming values to the variables 
     int year =0 , month =0 ; 
     //check if year is null 
     if (string.IsNullOrWhiteSpace(_year) && _month != null) 
     { 
      year = DateTime.Now.Date.Year; 
      month = Convert.ToInt32(_month.Trim()); 
     } 
     else 
     { 
      year = Convert.ToInt32(_year.Trim()); 
      month = Convert.ToInt32(_month.Trim()); 
     } 
     //calculate ttal number of days in a particular month for a that year 
     int daysInMonth = DateTime.DaysInMonth(year, month); 
     var days = Enumerable.Range(1, daysInMonth); 
     var query = db.Sales.Where(x => x.Date.Year == year && x.Date.Month == month).Select(g => new 
     { 
      Day = g.Date.Day, 
      Total = g.GrandTotal 
     }); 
     var model = new SalesVM 
     { 
      Date = new DateTime(year, month, 1), 
      Days = days.GroupJoin(query, d => d, q => q.Day, (d, q) => new DayTotalVM 
      { 
       Day = d, 
       Total = q.Sum(x => x.Total) 
      }).ToList() 
     }; 
     return View(model); 
    } 

Мои Просмотр моделей:

public class DayTotalVM 
{ 
    public int Day { get; set; } 
    public decimal Total { get; set; } 
} 
public class SalesVM 
{ 
    public DateTime Date { get; set; } 
    public List<DayTotalVM> Days { get; set; } 
} 

Вид:

<table class="table table-striped" id="datatable"> 
    <thead> 
     <tr class="dataTableHead"> 
      <th>Day</th> 
      <th>Amount</th> 
     </tr> 
    </thead> 
    @{decimal total = 0;} 
    @for (int i = 0; i < Model.Days.Count; i++) 
    { 
     <tr> 
      <td> 
       @{ 
        <text>@year - @mnth - </text> 
        @Html.DisplayFor(m => m.Days[i].Day); 
                 DateTime dateValue = new DateTime(year, mnth, Model.Days[i].Day); 
                 <text> : @dateValue.ToString("dddd")</text> 

       } 
      </td> 
      <td class="sales"> 

       @{ 

     if (Convert.ToString(Html.DisplayFor(m => m.Days[i].Total)) != "0.00") 
     { 
      <strong style="color:#4800ff;"><strong> @Html.DisplayFor(m => m.Days[i].Total) </strong></strong> 
     } 
     else 
     { 
      @Html.DisplayFor(m => m.Days[i].Total) 
     } 
       } 
       @{total += (decimal)(Model.Days[i].Total);} 
      </td> 

     </tr> 
    } 
    <tfoot class="dataTableHead"> 
     <tr> 
      <td> 
       <h4 class="pull-right">Total :</h4> 
      </td> 
      <td> 
       <h4>@total</h4> 
      </td> 
     </tr> 
    </tfoot> 
</table> 

Результат:

enter image description here

ответ

0

Вы не заказываете результаты в любом месте. Вы должны сделать что-то подобное (при условии, что вы хотите, чтобы они были в порядке возрастания):

var query = 
    db.Sales.Where(x => x.Date.Year == year 
         && x.Date.Month == month) 
      .OrderBy(x => x.Date) 
      .Select(g => new 
      { 
       Day = g.Date.Day, 
       Total = g.GrandTotal 
      }); 
+0

Thanks @ArtOfCode .. Не осознал этого! –

Смежные вопросы