目前我正面临嵌套linq的问题。
这是我的桌子,现在我正在开发MVC4 Razor网络应用程序。
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 Razor网络应用程序。 我想为预订者编写嵌套的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
)?
由于 青蛙
答案 0 :(得分:1)
我认为你根本不需要使用Bookers类。
这个答案假定,既然你正在使用实体框架,那么你就可以在那些相互指向的类上拥有导航属性(例如,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;
答案 1 :(得分: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();