预期的上下文关键字'on'

时间:2013-06-19 15:36:12

标签: linq

我需要在一个具有多个where条件的表上执行左外连接。我在我的选择上输入错误消息“在''上预期的上下文关键字'。在我的下面的代码我的第一个特定表的位置< strong> CourseDbset 我需要做一个左外连接。我的第二个地方应用于我的结果数据,根据状态值过滤数据。如果我不清楚,我道歉。

var StudentsInfo  =(from user in context.aspnet_Users
                                    join lc in context.class on                      
                                         user.userId equals lc.userId
                                    join course in context.CourseDbSet
                                    .Where(o => o.courseId == sessionId && o.enrollId = sessionid
                                    && o.deptID == sessionoddeptid).DefaultIfEmpty()

                                    select new
                                   {
                                     userid = user.UserId,
                                     username = user.UserName,
                                     status   = course.status

                                   }).Where(o => o.status == 0 || o.status == 3 || o.status == 4 || o.status is DBNull).ToList();

1 个答案:

答案 0 :(得分:2)

你的第一次加入(这是正确的):

join lc in context.class 
  on user.userId equals lc.userId

那就是你的第二次加入(这是错误的):

join course in context.CourseDbSet
                      .Where( o => o.courseId == sessionId && 
                                   o.enrollId = sessionid && 
                                   o.deptID == sessionoddeptid ).DefaultIfEmpty()

// missing on statement
[on user.SOMETHING equals course.SOMETHING]

//编辑

Ups ..我错过了.DefaultIfEmpty()电话。如果你想执行左连接,那么你需要一个类似的东西:

join course in context.CourseDbSet
                      .Where( o => o.courseId == sessionId && 
                              o.enrollId = sessionid && 
                              o.deptID == sessionoddeptid )

// missing on statement && left join
   on user.SOMETHING equals course.SOMETHING
 into courseJoinData
 from courseJoinRecord in courseJoinData.DefaultIfEmpty( )