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