2015-04-15 2 views
0

Я пытаюсь соединить две таблицы с помощью Linq для SQL, но я получил сообщение об ошибке сКак соединить две таблицы с помощью LINQ к SQL для получения данных в ASP.NET

Ссылка на объект не указывает на экземпляр объекта

Я думаю, из-за метода FirstOrDefault(), я изменил его, но ошибка все же !!!

это мой код:

 LblCourseCode.Text = Request.QueryString["CourseCode"]; 

     try 
     { 

      var qry = from cs in db.Courses 

         join inst in db.Instructors 
         on cs.CourseId equals inst.CourseId 
         where cs.CourseCode == "@CourseCode" 


         select new 
         { 
          //cs, 
          //inst 


          cs.CourseCode, 
          cs.CourseName, 
          cs.CourseAbout, 
          cs.CourseObjectives, 
          cs.CourseLearningOut, 

          inst.InstructorName, 
          cs.CourseImgUrl, 
          ////instr = from ins in db.Instructors 
          ////  select new { ins.InstructorName } 

         }; 

      //LblCourseCode.Text = qry.courseCode; 
      LblCourseName.Text = qry.FirstOrDefault().CourseName; 
      LblCourseAbout.Text = qry.FirstOrDefault().CourseAbout; 
      LblObjectives.Text = qry.FirstOrDefault().CourseObjectives; 
      LblLearningOutcomes.Text = qry.FirstOrDefault().CourseLearningOut; 
      LblCourseInstructore.Text = qry.FirstOrDefault().InstructorName; 

      ImageCourseAb.ImageUrl = qry.FirstOrDefault().CourseImgUrl; 

     } 
     catch(Exception ex) 
     { 
      LblErr.Text = ex.Message; 
     } 

    } 
+0

Уверены, что коллекция 'qry' не пуста? 'FirstOrDefault' возвратит' null', если коллекция пуста. – Christian

+0

Да, я уверен, что есть данные, я проверю вашу ссылку о NullRefereneceEx, спасибо – Abdullah

ответ

1

Чтобы обработать случай, когда коллекция пуста, вы должны добавить проверку перед запрашивая его:

if (qry.Any()) 
{ 
     LblCourseName.Text = qry.FirstOrDefault().CourseName; 
     LblCourseAbout.Text = qry.FirstOrDefault().CourseAbout; 
     LblObjectives.Text = qry.FirstOrDefault().CourseObjectives; 
     LblLearningOutcomes.Text = qry.FirstOrDefault().CourseLearningOut; 
     LblCourseInstructore.Text = qry.FirstOrDefault().InstructorName; 

} 

Вместо регистрацию вы можете сделать вложенный Еогеасп -loop, это не очень, но, возможно, это поможет вам изолировать проблему:

var qry = new List<object>(); 
foreach (var cs in db.Courses.Where(c => c.CourseCode == "@CourseCode")) 
{ 
    foreach (var inst in db.Instructors) 
    { 
     if (inst.CourseId == cs.CourseId) 
     { 
      qry.Add(new 
      { 
       cs.CourseCode, 
       cs.CourseName, 
       cs.CourseAbout, 
       cs.CourseObjectives, 
       cs.CourseLearningOut, 
       inst.InstructorName, 
       cs.CourseImgUrl, 
      }); 
     } 
    } 
} 
+0

еще не решен, есть ли другой способ без соединения? – Abdullah

+0

См. Обновление выше – Christian

+0

Большое спасибо, это было полезно, – Abdullah

Смежные вопросы