1

我需要在一个具有多个 where 条件的表上进行左外连接。我在选择时收到错误消息“预期上下文关键字'on'”。在下面的代码中,我的第一个 where 是我在其上的特定表CourseDbset需要做一个左外连接。我的第二个 where 应用于我的结果数据以根据状态值过滤数据。如果我不清楚,我深表歉意。

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();
4

1 回答 1

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( )
于 2013-06-19T15:43:59.243 回答