• 1405/06/30

پاسخ جلسه 126 تمرین نمایش نام استاد دوره :

سلام استاد وقتتون بخیر

من به جای اینکه مستقیماً اطلاعات Course رو نمایش بدم یک کلاس سفارشی CustomType به نام ListClassItem درست کردم و از این طریق اطلاعات داخل جدول رو در dgvCourse نمایش دادم و از SubQueryداخل CourseRepository استفاده کردم.

کلاس ListClassItem :

using System;
using System.Collections.Generic;
using System.Text;

namespace Utilities.CustomType
{
    public class ListClassItem
    {
        public int CourseId { get; set; }
        public int Hours { get; set; }
        public string Title { get; set; }
        public int StudentCount { get; set; }
        public string TeacherName { get; set; }
        public int RegisterCount { get; set; }
    }
}

CourseRepository:

 public List<ListClassItem> GetClassItem()
 {
     return _context.Courses.Select(c => new ListClassItem
     {
         CourseId = c.CourseId,
         Hours = c.Hours,
         Title = c.Title,
         StudentCount = c.StudentCount,
         TeacherName = _context.Persons.Where(p => p.PersonId == c.TeacherId &amp;amp;&amp;amp; p.IsTeacher == true).Select(p => p.Name + " " + p.Family).FirstOrDefault(),
         RegisterCount = c.StudentCount
     }).ToList();
 }

توضیحات متد :

در این متد من یک لیست از نوع ListClassItem برمیگردونم که اطلاعات دوره هارو نمایش بده

با استفاده از Select از جدول Course و از new ListClassItem یک شیء جدید میسازم

تا اطلاعات رو از جدول داخل کلاسListClassItem قرار بدم

 TeacherName در این قسمت من باید نام استادی که برای اون دوره ثبت شده رو دریافت کنم که اینجا با زدن کوئری به جدول Persons این کار رو انجام میدم و برسی میکنم که PersonId جدول Person با TeacherId جدول Course برابر باشد و حتما باید در جدولPerson فیلدIsTeacher برابرtrue باشد و درنهایت با .Select نام ونام خانوادگی استاد رو به هم وصل میکنیم و نام کامل استاد رو نمایش میدیم و در نهایت از دستور.FirstOrDefault() استفاده میکنیم که اگر نتیجه ایی پیدا نشد مقدار پیشفرض NULLبرمیگرده

 

LoadData:

  void LoadData()
  {
      dgvCourse.AutoGenerateColumns = false;
      List<ListClassItem> listClassItems = _courseRepository.GetClassItem();
      foreach (var course in listClassItems)
      {
         
   
          dgvCourse.Rows.Add(course.CourseId, course.Title, course.TeacherName, course.Hours, course.StudentCount, 0);
      }

  }
  #endregion

اینجا یک لیست از کلاسی که ساختیم میسازسم و متد GetClassItem(); را از داخلcourseRepository صدا میزنیم

ممنون از زحمات ارزشمندتون استاد🙏