Member 11746146 Ответов: 1

Как я могу получить доступ к анонимным свойствам объекта в представлении из соединения группы linq с агрегатной функцией MVC?


Я соединил две таблицы, которые имеют свойство навигации, используя агрегатную функцию Linq group join. затем я передал его в "бритвенный вид". но я не вижу свойств анонимного объекта, который я создал вместе с запросом. я хочу получить доступ к ним на просмотре.

Что я уже пробовал:

это мои модели

 public class Week
    {
        public int WeekId { get; set; }

        [Required]
        public string Name { get; set; }


        [Required]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime Date { get; set; }

        public virtual ICollection<Student> Students { get; set; }

    }

    public class Student
    {
        public int StudentId { get; set; }


        [Required()]
        public int FormNumber { get; set; }


        [Required()]
        public string Name { get; set; }


        [StringLength(11)]
        [Required()]
        public string Phone { get; set; }


        [EmailAddress()]
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }

        public int WeekId { get; set; }
        public virtual Week Week { get; set; }
    }


my controller

    private ApplicationDbContext db = new ApplicationDbContext();

        public ActionResult Index()
        {
            var query = from a in db.Weeks
                        join c in db.Students on a.WeekId equals c.WeekId into g
                        select new { WeekName = a.Name, Date = a.Date, StudentCount = g.Count() };

            return View(query.ToList());

            //return View(db.Weeks.ToList());
        }

my view

    @model IEnumerable<Report.Models.Week>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Date)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.WeekId }) |
                @Html.ActionLink("Details", "Details", new { id = item.WeekId }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.WeekId })
            </td>
        </tr>


Жалобы
Свойства WeekName и StudentCount не могут быть доступны в моем представлении
Пожалуйста, помогите

1 Ответов

Рейтинг:
1

Krunal Rohit

Потому что это свойства анонимного объекта.
Вам нужно привести свой список к какому - то объекту-создать ViewMdel.

Например,

модель представления:

public class StudentViewModel
{
    public string WeekName {get;set;}
    
    public DateTime Date {get;set;}
    
    public int StudentCount {get;set;}
}


Контроллер:
private ApplicationDbContext db = new ApplicationDbContext();
 
public ActionResult Index()
{
    var query = from a in db.Weeks
                join c in db.Students on a.WeekId equals c.WeekId into g
                select new StudentViewModel{ WeekName = a.Name, Date = a.Date, StudentCount = g.Count() };

    return View(query.ToList());
}


Смотреть:
@model IEnumerable<studentviewmodel>
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.WeekName)
        </td>
    </tr>
}


Это должно сработать ;)
Дайте мне знать, если у вас есть какие-то сомнения.


КР.