【问题标题】:How to do following in Entity Framework 4.1 using Linq如何使用 Linq 在 Entity Framework 4.1 中执行以下操作
【发布时间】:2011-09-10 19:09:25
【问题描述】:

假设上面给出的数据模型,如何在 EF 4.1 中执行以下查询

Select 
   students.firstname
   ,students.lastname
   ,classes.classname
   ,IsNull(studentsclasses.id,0) Attending 
from students
cross join classes 
left outer join studentsclasses on studentsclasses.classid = classes.classid 
            and studentsclasses.studentid = students.studentid
where students.studentid = 5

以下是我的尝试

from s in Students
from c in Classes
select new {
              StudentFirstName = s.Firstname,
              StudentLastName = s.Lastname,
              ClassName = c.Classname
           }

【问题讨论】:

    标签: c# linq ef-code-first


    【解决方案1】:

    在实体框架中,studentsclasses 之间的关系应由每个 student 实体中的导航属性 classes 表示,该实体包含与学生相关的所有类。使用这个你可以做到:

    var student = Students.FirstOrDefault( s = > s.studentid == 5);
    if(student!=null)
    {
      var studentClasses = student.classes.Select( c => new
      {
         StudentFirstName = student.Firstname,
         StudentLastName = student.Lastname,
         ClassName= c.Classname     
      });
      //..
    }
    

    【讨论】:

    • 问题是我能够加入两个班级的第三列。但是,在 EF 4.1 中你没有中间类。所以,我无法获得第三列的值。
    • @Mohit:你指的第三列是什么?
    • 我很抱歉第四列。看下面的查询 Select students.firstname ,students.lastname ,classes.classname ,IsNull(studentsclasses.id,0) 从学生参加交叉加入班级左外加入学生类在studentclasses.classid = classes.classid和studentclasses.studentid =学生。 studentid where students.studentid = 5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多