Оператор foreach не может работать с переменными типа 'Task < - PullRequest
0 голосов
/ 18 сентября 2018
var contacts = (from c in _db.Contacts
                join dgm in _db.DistributionGroupMembers on c.Id equals dgm.ContactId
                join dg in _db.DistributionGroups on dgm.DistributionGroupId equals dg.Id
                join dgis in _db.DistributionGroupInSms on dg.Id equals dgis.DistributionGroupId
                where dgis.SmsId == SmsId
                select new
                {
                    id = c.Id,
                    FirstName = c.FirstName,
                    LastName = c.LastName,
                    PhoneNumber = c.PhoneNumber,
                    Result = "Waiting to be sent"
                }).Distinct().ToArrayAsync();

foreach (var contact in contacts) //contacts is underlined
{
    recipients.Recipients.Add(new RecipientsInSmsData() { Id = contact.id,
        FirstName = contact.FirstName,
        LastName = contact.LastName,
        PhoneNumber = contact.PhoneNumber,
        SendingResult = contact.SendingResult
    });
}

Сообщение об ошибке компилятора:

Оператор foreach не может работать с переменными типа 'Task <[]>', потому что 'Task <[]>' не содержит определения открытого экземпляра для«GetEnumerator»

между <> после задачи говорит:

анонимный тип: int id, строка FirstName, строка LastName, строка PhoneNumber, строка Result

1 Ответ

0 голосов
/ 18 сентября 2018

Асинхронные операции должны быть await отредактированы, чтобы получить результат, документация является отличной отправной точкой для изучения того, как использовать async и await.
Другиепроблема в том, что foreach не требуется, если LINQ используется правильно:

var contacts = await (
            from c in _db.Contacts
            join dgm in _db.DistributionGroupMembers on c.Id equals dgm.ContactId
            join dg in _db.DistributionGroups on dgm.DistributionGroupId equals dg.Id
            join dgis in _db.DistributionGroupInSms on dg.Id equals dgis.DistributionGroupId
            where dgis.SmsId == SmsId
            select new RecipientsInSmsData
            {
                Id = c.Id,
                FirstName = c.FirstName,
                LastName = c.LastName,
                PhoneNumber = c.PhoneNumber,
                Result = "Waiting to be sent"
            })
            .Distinct()
            .ToArrayAsync();

recipients.Recipients.AddRange(contacts);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...