2016-07-28 21 views
-3

Ich bin sehr neu in LINQ, arbeiten mit jemand anderen Code und möchten es so wenig wie möglich bearbeiten.Filtern von Ergebnissen von Task.WhenAll

Ich versuche herauszufinden, wie ich den folgenden Code erhalten kann, um Leute zu ignorieren, die Null-Nummern haben.

return new ReadOnlyCollection<numbertype>(
    await Task.WhenAll(people.name.Concat(people.name) 
            .Distinct() 
            .Select(person => GetnumberAsync(person))) 
); 
private static anync Task<numbertype> GetnumberAsync(Person person) 
{ 
    // Do Some Stuff 
    return validnumber.FirstOrDefault(); 
} 

Wie kann ich die resultierende IEnumerable<Task<numbertype>> nur Nicht-Null-Werte filtern?

+0

Geben Sie den Code für GetNumberAsync ein, da dies wahrscheinlich der Fehler ist. – Tim

+0

Abhängig vom Rückgabetyp von 'GetNumberAsync' sollte etwas wie' .Select (person => GetNumberAsync (person)! = Null) '? Schwer zu sagen ohne mehr Code. – Tim

+0

Versucht .Wählen Sie (Person => GetNumberAsync (Person)! = Null) und erhalten Sie den Fehler kann nicht von Bool zu Task konvertieren. Ich kann nicht viel vom Code teilen. – Dawn555

Antwort

0

Ich würde es als zwei Schritte tun. Sie könnte in der Lage sein, die Syntax mit einem zu arbeiten, aber es wird es nicht wert sein.

var ret = await Task.WhenAll(people.name.Concat(people.name) 
             .Distinct() 
             .Select(person => GetnumberAsync(person))); 

return new ReadOnlyCollection<numbertype>(ret.Where(c => c != null));