【问题标题】:Select mutiple fields from two table in LINQ Select Query using LEFT JOIN使用 LEFT JOIN 从 LINQ 选择查询中的两个表中选择多个字段
【发布时间】: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


    【解决方案1】:

    你必须使用 a 而不是 _courses:

     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 = a
            }).ToList();
    

    【讨论】:

    • 我已经更新了我的问题。即使用视图模型方法...稍后我也需要在另外两个表上添加连接...这种方法可以使用吗???
    • 你的方法出现以下错误.....无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。
    • 非常感谢它有效......现在如果需要在另外两个表上添加连接(接下来的两个表有内部连接)那么它应该没问题......对吧???
    • @toxic 是的,你也可以加入其他表格
    • 您能否检查我对这个问题的最后一个请求,我将非常感谢您,我已经在底部更新了我的问题...在 UWLApplicationURL 上出现空错误!!!!!!!!! !!
    【解决方案2】:

    我已经设法解决了第一个问题,感谢 Sandeep 让我知道应该去哪里找。接下来我需要检查多个连接

      var bb2 = (from _courseInstances in _uof.CourseInstances_Repository.GetAll()
                         join _coursesList in _uof.Courses_Repository.GetAll() on _courseInstances.CourseID equals _coursesList.CourseID into c
                         from _courses in c.DefaultIfEmpty()
                         orderby _courseInstances.CourseCode
                         select new CoursesInstanceStudyLevel_ViewModel()
                         {
                             _CourseInstanceModel = _courseInstances,
                             _CoursesModel = _courses 
                         }).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 2014-09-17
      • 1970-01-01
      • 2010-11-15
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多