упростить linq to sql, возвращая несколько объектов - PullRequest
1 голос
/ 20 марта 2011

хорошо, я должен признать, что до сих пор я все еще не знаю лучший способ вернуть несколько объектов, используя linq для sql.

 public IList<Course> GetAllStudentCourses()
    {
        IList<Course> output = new List<Course>();
        using (lenDataContext db = new lenDataContext())
        {
            var result =
                 from ct in db.CourseByTutors
                 join c in db.Courses on ct.CourseId equals c.Id
                 join u in db.Users on ct.TutorId equals u.Id
                 select new
                 {
                     c,
                     u,
                 };
            foreach (var r in result)
            {
                Course course = new Course();
                course.CourseByTutor = new CourseByTutor();
                course = r.c;
                course.IsGroupString = (r.c.IsGroup == 1) ? "Yes" : "No";
                course.User = r.u;

                output.Add(course);
            }
        }
        return output;
    }

Я хотел бы вернуть объекты Course и User обратно в пользовательский интерфейс.

 private void InitializeData()
    {
        Course c = new Course();
        dgCourses.AutoGenerateColumns = false;

        bs.DataSource = c.GetAllStudentCourses().ToList();          

        dgCourses.DataSource = bs; //bs is bindingsource
    }

Как отобразить данные пользователя, например, Имя для Гридвью? я поместил User.Name в datapropertyName, но он все еще ничего не показывает. мой Course.User имеет значение.

Ответы [ 2 ]

1 голос
/ 20 марта 2011

Если вы вернете db.CourseByTutors, у вас должен быть доступ как к пользователям, так и к курсам.Два внутренних соединения, которые вы выполняете выше, кажутся несущественными, потому что вы должны иметь доступ к ним через EntitySet.Просто используйте свойства навигации для доступа ко всем пользователям и курсам.

public IQueryable<CourseByTutors> GetAllStudentCourses()
{
    lenDataContext db = new lenDataContext();
    return db.CourseByTutors;
}

Затем в вашем сеточном представлении вы можете ссылаться на свойства Coures.property и Users.property в столбце с привязкой к данным.Вы не можете использовать оператор using, потому что, как только вы вернете IQueryable, вы избавитесь от текста данных.

0 голосов
/ 20 марта 2011

Вы можете сгладить свой объект, поместив его в другой объект:

public class CourseDisplay
{
   private Course course; 

   public CourseDisplay(Course course)
   {
       this.course = course;
   }

   public string CourseName 
   { 
       get { return course.Name; } 
   }

   public string UserName 
   { 
       get { return course.User.Name;} 
   }
}

Проще связать дочернее свойство в ObjectListView .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...