2017-05-28 6 views
0

Ich habe eine Liste von Antwort-Entities (Listengröße ist 50-2000 Elemente - Entitäten haben viel mehr Eigenschaften als hier gezeigt) Ich möchte eine LINQ-Abfrage alle Entitäten für diejenigen, die nicht haben eine Antwort richtig noch so würde meine Ausgabeliste von Entitäten alle Entitäten von Fred und Harry aus der folgenden Tabelle auszuschließen, weil sie jeweils eine richtige Antwort haben - und alle Entitäten mit Antworten per Bob und Rechnung enthalten - ich muss auf isCorrect und nicht auswählen auf die Antwort selbst, da die Antworten verschlüsselt sind, wenn sie dem Benutzer präsentiert werden, und ich brauche auch die vollständige Entität.C# linq wählen Sie einige Entitäten

- username | answer | isCorrect | ..... 
- fred  | a  | false   exclude as he has 1 correct 
- fred  | d  | false   exclude as he has 1 correct 
- fred  | b  | false   exclude as he has 1 correct  
- fred  | a  | true    exclude as he has 1 correct 
+ bob  | a  | false   need this entity 
+ bob  | b  | false   need this entity 
+ bill  | a  | false   need this entity  
+ bill  | b  | false   need this entity 
- harry | a  | false   exclude as he has 1 correct 
- harry | b  | true    exclude as he has 1 correct  
- harry | c  | false   exclude as he has 1 correct  

Ich kann eine Liste von Benutzern ohne richtigen Antworten bekommen

var usersWithNoCorrectAnswers = entities 
    .GroupBy(a => a.UserName) 
    .Where(g => g.Any(x => !x.IsCorrect)) 
    .Select(g => g.Key) 
    .ToList(); 

aber ich bin nicht sicher, wie eine Liste der Organisationen, die keine richtige Antwort bekommen dank

Antwort

2

Um alle Entitäten für die Benutzer, die alle ihre Antworten falsch haben, können Sie auf den Benutzernamen gruppieren und Benutzer herausfiltern, die irgendwelche richtig haben. Wählen Sie dann einfach die Entitäten für die Gruppen aus und glätten Sie die Ergebnisse.

var results = entities.GroupBy(a => a.UserName(
    .Where(g => !g.Any(a => a.IsCorrect)) 
    .SelectMany(g => g) 
    .ToList(); 
+0

Ich habe redigiert, um es klarer zu machen Ich brauche alle Entitäten und die vollständige Einheit nicht nur Antworten, danke – user2153050

+1

@ user2153050 OK Ich habe meine Antwort aktualisiert, um die Entitäten statt nur die Antworten zu erhalten, wenn ich Ihre Änderungen verstehe zur Frage. – juharr

+0

Dies funktionierte, ich stelle fest, entweder diese Arbeit. Wo (g =>! G.Any (a => a.IsCorrect)) und. Wo (g => g.Any (a =>! A.IsCorrect)). – user2153050

1

Ich glaube, Sie so etwas wie dieses brauchen:

var results = entities.GroupBy(a => a.UserName(
    .Where(g => !g.Any(a => a.IsCorrect)) 
    .SelectMany(g => g.Select(a => 
      new { 
       username = a.username, 
       answer = a.answer, 
       ... 
      } 
    )) 
    .Distinct() 
    .ToList(); 

Oder

var results = entities.GroupBy(a => a.UserName(
    .Where(g => !g.Any(a => a.IsCorrect)) 
    .SelectMany(g => g.Select(a => a)) 
    .Distinct() 
    .ToList(); 
1

aber ich bin nicht sicher, wie ohne richtige Antwort eine Liste von Unternehmen zu erhalten

var noCorrectAnswers = entities 
    .GroupBy(q => q.UserName) 
    .Where(g => !g.Any(a => a.IsCorrect)) 
    .SelectMany(g => g) 
    .ToList();