c# winforms, используя asyn c и ожидайте в функции поиска - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь найти сотрудников, используя asyn c, и жду с функцией кнопки, но мой код не работает так, как я ожидаю, и получаю сообщение об ошибке типа «требуется приемник типа« IQueryable »». Как мне поступить, если я хочу использовать asyn c await в windows форме. Вот мой код: Заранее спасибо!

  private async void btnSearch_Click(object sender, EventArgs e)
{
    using(db)
    {
        var employees = db.Analys
            .Where(x => x.Status == true)
            .Select(a => new { a.UserId, a.FirstName, a.LastName, a.DOB, a.Department,  a.DepartmentId })
            .AsEnumerable()
            .Select(b => new {
                UserId = b.UserId,
                FirstName = b.FirstName,
                LastName = b.LastName,
                Age = CalculateAge(b.DOB.ToString()),   
                Department = b.Department.DepartmenName, 
            });
            var data = await employees.ToListAsync();
            if (data!= null)
            {
                dgvEmployees.DataSource = data;           
            }    
    }

}   

1 Ответ

2 голосов
/ 03 мая 2020

Можете ли вы добавить полный текст ошибки? Но из кода, который вы уже предоставили, я предполагаю, что вы используете Entity Framework для доступа к вашей БД, поэтому AsEnumerable() уже должен был материализовать данные, извлекающие их из базы данных. Я бы сказал, что вам это здесь не нужно, и первое предложение Select тоже. Попробуйте что-то вроде этого:

  var employees = await db.Analys
        .Where(x => x.Status == true)
        .Select(b => new {
            UserId = b.UserId,
            FirstName = b.FirstName,
            LastName = b.LastName,
            Age = CalculateAge(b.DOB.ToString()),   
            Department = b.Department.DepartmenName, 
        })
        .ToListAsync();

Также здесь не требуется проверка нуля, потому что EF должен возвращать пустую коллекцию.

...