2016-07-28 6 views
-3

Я очень новичок в LINQ, работая с чужим кодом и хочу как можно меньше его отредактировать.Результаты фильтрации Task.WhenAll

Я пытаюсь понять, как я могу получить следующий код, чтобы игнорировать людей с нулевыми номерами.

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(); 
} 

Как можно отфильтровать результирующий IEnumerable<Task<numbertype>> только к ненулевым значениям?

+0

Отправьте код для 'GetNumberAsync', так как это, вероятно, проблема. – Tim

+0

В зависимости от типа возврата 'GetNumberAsync', что-то вроде' .Select (person => GetNumberAsync (person)! = Null) '? Трудно сказать без кода. – Tim

+0

Пробовал. Выбрать (person => GetNumberAsync (person)! = Null) и получить ошибку не может конвертировать из bool в задачу. Я не могу поделиться большей частью кода. – Dawn555

ответ

0

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

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

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