2016-04-06 20 views
1

Wie Listenwerte in linq Bedingung übereinstimmen?Wie man Listenwerte in linq Bedingung zusammenbringt?

Ich habe eine Liste von IDs, also müssen diese IDs in der Bedingung übereinstimmen und Daten von einer Tabelle sol erhalten, wie?

public ActionResult StudentSelect(
    long? CompanyId, 
    long? CompanyLocationId, 
    long? ClassId, 
    long? SectionId, 
    long? AcademicId, 
    long? ExamId) //) //long? SectionId) 

Unten RegId ist Liste der Anmeldung des Schülers Ids

{ 
    var RegId = (
     from a in db.Student_Marks_Percentage 
     where a.Delete_Flag == false && 
      a.Exam_Id == ExamId && 
      a.Academic_Year_Id == AcademicId && 
      a.Class_Id == ClassId 
     select a.Registration_Id) 
     .ToList(); 

    List<StudentList> Student = new List<StudentList>(); 

    if (AcademicId != null && 
     CompanyId != null && 
     CompanyLocationId != null && 
     ClassId == null && 
     SectionId == null) //&&)//&& ClassId != null) //) 
    { 
     Student = (
      from a in db.Student_Re_Admission 
      join b in db.Student_Registration on a.Registration_Id equals b.Registration_Id 
      join c in db.Student_Roll_No_Assign on a.Registration_Id equals c.Registration_Id 
      where c.Academic_Year_Id == AcademicId && 
       c.Company_ID == CompanyId && 
       c.COMPANY_LOCATION_ID == CompanyLocationId && 
       a.Academic_Year_Id == AcademicId && 
       c.Class_Id == ClassId && 
       a.Class_Id == ClassId && 
       a.Section_Id == SectionId && 
       c.Section_Id == SectionId && 

Hier muss ich

   a.Registration_Id != RegIds && 
       a.Promoted == false && 
       a.Delete_Flag == false 
       //a.Academic_Year_Id == AcademicId && 
       //a.Company_ID == CompanyId && 
       //a.COMPANY_LOCATION_ID == CompanyLocationId 
      select new StudentList() 
      { 
       Registration_Id = a.Registration_Id, 
       Admission_No = a.Admission_No, 
       Student_First_Name = a.Student_First_Name, 
       Student_Middle_Name = a.Student_Middle_Name, 
       Student_Last_Name = a.Student_Last_Name, 
       Set_Roll_No = c.Set_Roll_No, 
       Roll_Id = c.Roll_Id 
      }) 
      .OrderBy(a => a.Registration_Id) 
      .ToList(); 

      ViewBag.StudentList = Student.ToList(); 
      return PartialView(); 
     } 
    } 

Ich habe versucht, wie unten an a.Registration_Id alle Liste von IDs vergleichen, aber immer gleichen Daten der Schülerliste.

var merged = new List<StudentList>(Student); 
       merged.Except(Student.Where(p2 => RegId.Exists(p1 => p2.Registration_Id != p1.Registration_Id))); 
+0

könnten Sie erklären, was Sie als Ergebnis haben. Es ist ein wenig unklar, die Liste der IDs, über die Sie sprechen, ist es das Ergebnis der ersten (Reg) Abfrage oder der eindeutigen IDs, die Sie in den WHERE-Klauseln haben? – Thorarins

+0

Ich möchte ein Ergebnis: Holen Sie sich Daten, in denen nicht RegistrationId von var RegId-Listen –

+0

PLZ jetzt meine zuletzt gesehen werden soll. –

Antwort

0

Erste var Liste von denen

var RegId = (from a in db.Student_Marks_Percentage 
         where a.Delete_Flag == false 
         && a.Exam_Id == ExamId 
         && a.Academic_Year_Id == AcademicId 
         && a.Class_Id == ClassId 
         select a).ToList(); 

zweite Liste, von denen Daten

List<StudentList> Student = new List<StudentList>(); 

      if (AcademicId != null && CompanyId != null && CompanyLocationId != null && ClassId == null && SectionId == null) //&&)//&& ClassId != null) //) 
      { 
       Student = (from a in db.Student_Re_Admission 
          join b in db.Student_Registration on a.Registration_Id equals b.Registration_Id 
          join c in db.Student_Roll_No_Assign on a.Registration_Id equals c.Registration_Id       

          where c.Academic_Year_Id == AcademicId && c.Company_ID == CompanyId && c.COMPANY_LOCATION_ID == CompanyLocationId 
          && a.Academic_Year_Id == AcademicId && c.Class_Id == ClassId && a.Class_Id == ClassId 
          && a.Section_Id == SectionId && c.Section_Id == SectionId 
          //&& a.Registration_Id != RegId.Contains(a.Registration_Id) 
          && a.Promoted == false && a.Delete_Flag == false 
          //a.Academic_Year_Id == AcademicId && a.Company_ID == CompanyId && a.COMPANY_LOCATION_ID == CompanyLocationId 

          select new StudentList() 
          { 
           Registration_Id = a.Registration_Id, 
           Admission_No = a.Admission_No, 
           Student_First_Name = a.Student_First_Name, 
           Student_Middle_Name = a.Student_Middle_Name, 
           Student_Last_Name = a.Student_Last_Name, 
           Set_Roll_No = c.Set_Roll_No, 
           Roll_Id = c.Roll_Id 

          }).OrderBy(a => a.Registration_Id).ToList(); 
} 

Verschmelzung bekommen haben zu vergleichen haben zwei Listen durch Durchsuchen des folgenden Prozesses.

var merged = Student.Where(a1 => !RegId.Any(a2 => a1.Registration_Id == a2.Registration_Id)); 
0

Ich glaube, Sie brauchen nur zu ersetzen a.Registration_Id != RegIds mit:

!RegIDs.Contains(a.Registration_Id) 
+0

in Enthält (Registration_Id) Was ist die 'Registration_Id'? –

+0

Entschuldigung, ich habe den 'a.' Teil vergessen. Macht es jetzt Sinn? – devuxer

+0

Fehler bei der Kompilierung: Fehler Die beste überladene Methodenübereinstimmung für 'System.Collections.Generic.List .Contains (Model.Student_Marks_Percentage)' hat einige ungültige Argumente –

Verwandte Themen