2016-05-17 13 views
1

Ich denke, es muss einen einfachen Weg geben, aber nicht finden. Ich möchte prüfen, ob eine Liste von Elementen (ganz oder teilweise) in einer anderen Liste erscheint.Linq: Zählen, wie oft eine Unterliste in einer anderen Liste erscheint

Zum Beispiel: Sagen wir, ich habe Leute in einer Abteilung als Liste 1. Dann habe ich eine Liste von Sportarten mit einer Liste von Teilnehmern in diesem Sport.

Jetzt möchte ich zählen, in wie vielen Sportarten erscheinen alle Leute einer Abteilung.

(ich weiß, dass einige Tabellen möglicherweise nicht sinnvoll, wenn es von einer Normalisierung Winkeln suchen, aber es ist einfacher, auf diese Weise, als zu versuchen und meine realen Tabellen zu erklären)

So habe ich so etwas wie diese:

var peopleInDepartment = from d in Department_Members 
         group d by r.DepartmentID into g 
         select new 
         { 
          DepartmentID = g.Key, 
          TeamMembers = g.Select(r => d.PersonID).ToList() 
       }; 

var peopleInTeam = from s in Sports 
        select new 
        { 
         SportID = s.SportID, 
         PeopleInSport = s.Participants.Select(x => x.PersonID), 
         NoOfMatches = peopleInDepartment.Contains(s.Participants.Select(x => x.PersonID)).Count() 
      }; 

Der Fehler hier ist, dass peopleInDepartment keine Definition für 'Enthält' enthält. Ich denke, ich brauche nur einen neuen Blickwinkel.

Als Endergebnis würde ich Print:

Abteilung 1: Die Abteilung beteiligt sich an drei Sport

Abteilung 2: Die Abteilung beteiligt sich an 0 Sport

usw.

Antwort

1

zu urteilen Aus dem erwarteten Ergebnis sollten Sie die Abfrage wie die erste Abfrage auf der Abteiltabelle aufbauen. Vielleicht sind nur die Anzahl Sport in der ersten Abfrage wie folgt:

var peopleInDepartment = 
     from d in Department_Members 
     group d by r.DepartmentID into g 
     select new 
     { 
      DepartmentID = g.Key, 
      TeamMembers = g.Select(r => d.PersonID).ToList(), 
      NumberOfSports = Sports.Count(s => s.Participants 
               .Any(p => g.Select(r => r.PersonID) 
                  .Contains(p.PersonID) 
               ) 
            ) 
     }; 

NumberOfSports sollte Anzahl der Sport enthält, wo eines seiner Teilnehmer als Mitglied der aktuellen Abteilung gelistet (g.Select(r => r.PersonID).Contains(p.PersonID))).

Verwandte Themen