Linq 预期的上下文关键字';在';

Linq 预期的上下文关键字';在';,linq,Linq,我需要在一个具有多个where条件的表上执行左外部联接。我在select上得到错误消息,消息是“预期上下文关键字'on'”。在我下面的代码中,我的第一个位置是特定的表CourseDbset,我需要在该表上执行左外部联接。我的第二个位置应用于我的结果数据,以根据状态值筛选数据。如果我不清楚,我深表歉意 var StudentsInfo =(from user in context.aspnet_Users join lc i

我需要在一个具有多个where条件的表上执行左外部联接。我在select上得到错误消息,消息是“预期上下文关键字'on'”。在我下面的代码中,我的第一个位置是特定的表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();
您的第一次加入(正确):

这是您的第二次加入(这是错误的):

//编辑

联合包裹。。我错过了
.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( )

您有一个没有条件的第二个联接。您的想法是正确的,但左联接需要不同的语法。请参阅和以获得更好的想法。在我的where子句的末尾,我遇到了o.status==null的问题。它给了我一个错误“转换为值类型'Int16'失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为null的类型”。即使状态字段为,我也需要获取行null@BVidhya即使
o
为null,您也会得到行,但是当
o
为null时,检查将失败,您将进一步检查
o.status==1
。尝试
。其中(o=>o==null | | o.status==1[…])
。必须首先检查空值,否则无法检查状态。
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]
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( )