【发布时间】:2015-03-21 03:49:00
【问题描述】:
我正在尝试使用 LINQ 选择所有 CourseInstances(表)左连接到 Courses 表; CourseInstances 表在左侧,课程在右侧表。现在我的 LINQ 查询工作正常,直到我在 select new {.....我收到错误
中添加字段'_courses.StudyLevelId'错误
The name '_courses' does not exist in the current context
我正在使用 LINQPad 进行测试....在底部我提供了 ViewModel 方法代码...
LINQ 查询
from _courseInstances in CourseInstances
join _courses in Courses on _courseInstances.CourseID equals _courses.CourseID into c
from a in c.DefaultIfEmpty()
orderby _courseInstances.CourseCode
select new {_courseInstances.CourseID, _courseInstances.CourseCode, _courseInstances.CourseTitle, _courseInstances.UCASCode, _courseInstances.StartDate, _courses.StudyLevelId }
生成的没有 _courses.StudyLevelId 的 SQL 脚本
SELECT [t0].[CourseID], [t0].[CourseCode], [t0].[CourseTitle], [t0].[UCASCode], [t0].[StartDate]
FROM [CourseInstances] AS [t0]
LEFT OUTER JOIN [Courses] AS [t1] ON [t0].[CourseID] = ([t1].[CourseID])
ORDER BY [t0].[CourseCode]
我创建了 ModelView 来处理单个查询中的多个表,但我遇到了同样的错误
C# 中的视图模型
public class CoursesInstanceStudyLevel_ViewModel
{
public CourseInstanceModel _CourseInstanceModel { get; set; }
public CoursesModel _CoursesModel { get; set; }
public StudyLevelModel _StudyLevelModel { get; set; }
public ApplicationURLValidityModel _ApplicationURLValidityModel { get; set; }
}
C# Linq 查询
var bb2 =
(from _courseInstances in _uof.CourseInstances_Repository.GetAll()
join _courses in _uof.Courses_Repository.GetAll() on _courseInstances.CourseID equals _courses.CourseID into c
from a in c.DefaultIfEmpty()
orderby _courseInstances.CourseCode
select new CoursesInstanceStudyLevel_ViewModel()
{
_CourseInstanceModel = _courseInstances,
_CoursesModel = _courses
}).ToList();
多连接
当我尝试添加多个联接时出现以下错误。我相信连接是正确的,在 select{.... 数据为空的地方是一样的? UWLApplicationURL = _ApplicationURLValidityRules == null? (bool?)null : _ApplicationURLValidityRules.UWLApplicationURL }
Error :Cannot assign <null> to anonymous type property
Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'bool'
代码
from _courseInstances in CourseInstances
join _coursesList in Courses on _courseInstances.CourseID equals _coursesList.CourseID into c
from _courses in c.DefaultIfEmpty()
join _ApplicationURLValidityRulesList in ApplicationURLValidityRules on _courseInstances.CourseInstanceID equals _ApplicationURLValidityRulesList.CourseInstanceID into d
from _ApplicationURLValidityRules in d.DefaultIfEmpty()
join _studylevel in StudyLevels on _courses.StudyLevelId equals _studylevel.StudyLevelID
orderby _courseInstances.CourseCode
select new {_courseInstances.CourseID, _courseInstances.CourseCode, _courseInstances.CourseTitle, _courseInstances.UCASCode, _courseInstances.StartDate, _courses.StudyLevelId, _studylevel.LevelDescription, _studylevel.SLevelType, UWLApplicationURL = _ApplicationURLValidityRules == null? (bool?)null : _ApplicationURLValidityRules.UWLApplicationURL }
【问题讨论】:
标签: sql-server asp.net-mvc linq entity-framework