2016-01-18 3 views
0

Попытка связать запросы linq из-за создания простого фильтра для данных в моем представлении.Цепочки запросов LINQ

public ActionResult Index(int? courseId, string grade, int? statusId) 
    { 
     var query = from s in db.Students 
        join e in db.Enrollments on s.ID equals e.ID 
        join c in db.Courses on e.CourseID equals c.ID 
        orderby e.Grade.HasValue descending, e.Grade, s.StatusID 
        select new { s, e, c };   

     if (courseId != null) 
     { 
      query = query.Where(q => q.e.CourseID == courseId); 
     } 

     if (!string.IsNullOrEmpty(grade)) 
     { 
      query = query.Where(q => q.e.Grade.Equals(grade)); 
     } 

     if (statusId != null) 
     { 
      query = query.Where(q => q.s.StatusID == statusId); 
     } 

     query.Select(q => new ViewModels.ReportView 
       { 
        ID = q.s.ID, 
        Name = q.s.FirstName + " " + q.s.LastName, 
        Course = q.c.Title, 
        Grade = q.e.Grade, 
        GraduationDate = q.s.GraduationDate, 
        Status = q.s.Status.Title 
       }); 

Linq заставляет вас закончить запросы с избранной или группой, которая заставляет меня ставить ненужный выбрать на старте. По какой-то причине это приводит к тому, что он игнорирует последний выбор и просто использует начальную.

Я попытался группировки вместо этого e.ID, но это не работает, как ожидалось ...

Я уверен, что это просто, но я потерял, какие идеи?

+3

могли бы вы уточнить ваш вопрос? – Default

+5

Вы не сохраняете 'query.Select (q => new ViewModels.ReportView..' в конце, что является результатом того, что вы пытаетесь сохранить. Это новая переменная и возвращает нужную вам модель. помогли вам? –

+0

Когда это так, подумайте, что пришло время отдохнуть. Chhers – user3112059

ответ

0

Я обычно создаю вспомогательную функцию для Simplifier комплекс LINQ

class Test 
    { 
     public ActionResult Index(int? courseId, string grade, int? statusId) 
     { 
      var query = from s in db.Students 
         join e in db.Enrollments on s.ID equals e.ID 
         join c in db.Courses on e.CourseID equals c.ID 
         orderby e.Grade.HasValue descending, e.Grade, s.StatusID 
         select QueryResults(courseId, grade, statusId, s, e, c); 


     } 
     public ViewModels.ReportView QueryResults(int? courseId, string grade, int? statusId, Student student, Enrollments enrollment, Cource course) 
     { 

      if ((courseId != null) && (courseId != course)) 
      { 
       return null; 
      } 

      if ((!string.IsNullOrEmpty(grade)) && (grade != enrollment.Grade)) 
      { 
       return null; 
      } 

      if ((statusId != null) && (statusId != student.StatusID)) 
      { 
       return null; 
      } 

      return new ViewModels.ReportView 
      { 
       ID = student.ID, 
       Name = student.FirstName + " " + student.LastName, 
       Course = course.Title, 
       Grade = enrollment.Grade, 
       GraduationDate = student.GraduationDate, 
       Status = student.Status.Title 
      }); 
     } 
    }