简化linq到sql返回多个对象

时间:2011-03-20 01:06:22

标签: c# linq-to-sql

好吧,我必须承认,直到现在我仍然不知道使用linq返回多个对象的最佳方法。

 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;
    }

我想将课程和用户对象返回给UI。

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

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

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

如何显示用户数据,例如Gridview的名字? 我已将User.Name放到datapropertyName但它仍然没有显示任何内容。 我的课程。用户很有价值。

2 个答案:

答案 0 :(得分:1)

如果您返回db.CourseByTutors,您应该可以访问用户和课程。您在上面执行的两个内部联接似乎是无关紧要的,因为您应该能够通过EntitySet访问它们。只需使用导航属性即可访问所有用户和课程。

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

然后在gridview中,您可以在数据绑定列上引用Coures.property和Users.property的属性。您不能使用using语句,因为只要您返回IQueryable,就会丢弃datacontext。

答案 1 :(得分:0)

您可以通过将对象包装在另一个对象中来展平对象:

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中的子属性更简单。