2013-01-07 58 views
0

目前我正面临嵌套LINQ的问题。MVC4中的嵌套Linq剃​​须刀

这里是我的表,现在我正在开发MVC4 Razor Web应用程序。

student 
student_id,studentname,description 
book 
book_id,student_id,bookname,checkitout 
booker 
bookerid,book_id,bookername,bookerdescription 

我创建的模型显示

public class student_model{ 
    public int student_id {get;set;} 
    public string studentname {get;set;} 
    public string bookname {get;set;} 
} 

大家好,这里是我的表,现在我正在开发MVC4剃刀Web应用程序。 我想为booker编写嵌套的LINQ。所以我使用以下LINQ:

public List<student_model> finder (int stuid){ 
    var stubk = (from stu in contx.students 
     join bk in contx.books on stu.student_id equals bk.student_id 
     where stu.student_id == stuid 
     select new { 
      //here is wrong 
      student = from bker in contx.bookers 
       where bker.book_id=bk.book_id 
       select new student_model{ 
        student_id = stu.student_id, 
        studentname = stu.studentname, 
        bookname = bk.bookname 
       } 
     }).ToList(); 

    var next = stubk.Select(md=>md.student) 

    return (List<student_model>) next; 
} 

这是错误的嵌套的LINQ。所以我应该怎么做一个过滤器bookers.book_id = bk.book_id?我应该如何返回(List<student_model)?

感谢 青蛙

回答

1

我不认为你需要在所有使用的预订者类此。

这个答案假设你既然使用了实体框架,那么你在那些指向对方的类上有导航属性(例如,Books在其类上有一个Student属性,并且Student在其上有一个Books集合类)。

使用LINQ扩展方法,你可以做如下:

var studentModelList = new List<student_model>(); 
contx.Students.Include("Books") 
       .Where(stu => stu.student_id == stuid) 
       .Select(stu => stu.Books).ToList() 
       .ForEach(bookObj => 
         studentModelList.Add(new student_model { student_id = bookObj.student.student_id, studentname = bookObj.student.studentname, bookname = bookObj.bookname})) 
return studentModelList; 
0

删除筑巢和添加额外加入

public List<student_model> finder (int stuid){ 
    var stubk = (from stu in contx.students 
     join bk in contx.books on stu.student_id equals bk.student_id 
     join bker in contx.bookers on bk.book_id equals bker.book_id 
     where stu.student_id == stuid && bker.book_id=bk.book_id 
       select new student_model{ 
        student_id = stu.student_id, 
        studentname = stu.studentname, 
        bookname = bk.bookname 
       }).ToList();