2014-10-15 2 views
1

У меня есть таблица и мне нужно GroupBy date tBooked Мне нужна группа, чтобы вернуть Min StartDate и Max EndDate Мне нужна сумма дней. я написал следующее:MVC Linq, используя GroupBy Min Max и возвращаемый вид

 var model = _db.AnnualLeaves.Where(r => r.StafferId == stafferId) 
        .GroupBy(r => r.tBooked) 
        .Select(m => new 
        { 
         start = m.Min(r => r.StartDate), 
         end = m.Max(r => r.EndDate), 
         daycount = m.Sum(r => r.Days) 
        }); 

Я не могу показаться, чтобы получить модель, чтобы вернуться в представлении. Я пробовал все виды foreach, но ничего не получал ошибок.

Если я создаю View со следующим:

@foreach (var item in ViewData.Model) 
{ 
@item 
} 

Вид визуализирует:

{ start = 15/10/2014 00:00:00, end = 21/10/2014 00:00:00, daycount = 5 } 

{ start = 28/06/2015 00:00:00, end = 03/07/2015 00:00:00, daycount = 4.5 } 

Купить Я не могу получить @item.start на страницу.

Я попытался создать модель и изменить приведенный выше var model на IEnumerable на модель ниже.

public class ListLeaveModel 
{ 
public DateTime start { get; set; } 
public DateTime end { get; set; } 
public double daycount { get; set; } 
} 

Кажется, что я сейчас кружась в кругах. Я только что начал с MVC и C#, поэтому это, наверное, что-то очень простое! Надеюсь, это понятно - я понятия не имею, что важно.

+1

Вы пробовали возвращенные сами данные, т.е. не используя ViewData/ViewBag ... вернуться this.View (модель); Если это не решится; Я подозреваю, что вы возвращаете IQueryable, поэтому в своем заявлении linq попробуйте положить ToList() в конец. –

+0

Попробуйте '@ String.Format (" {0: d} ", item.start)' – chridam

+0

Спасибо, ребята. Пол, да, я пробовал все это - когда я добавил .ToList() до конца, это вызвало еще одну проблему. Исправлено, как показано ниже ... – PawnSacrifice

ответ

1

Вы не должны возвращать anymouse типа

var model = _db.AnnualLeaves.Where(r => r.StafferId == stafferId) 
        .GroupBy(r => r.tBooked) 
        .Select(m => new ListLeaveModel 
        { 
         start = m.Min(r => r.StartDate), 
         end = m.Max(r => r.EndDate), 
         daycount = m.Sum(r => r.Days) 
        }); 
    return View(model.ToList()); 

для Вида:

@model IList<ListLeaveModel> 

@foreach (var item in Model) 
{ 
    @item.start 
} 
+0

Удивительно, спасибо! Не уверен, что это данность, но у меня есть ошибка ... но мне просто нужно было добавить полное пространство имен @ IList Действительно оценить помощь ... не уверен, что я когда-либо был там , – PawnSacrifice