2015-09-22 14 views
-4

У меня есть следующий метод репозитория: -, почему я не могу ждать «System.Linq.IQueryable

public IQueryable<TSet> getAllScanEmailTo() 
     { 
     return t.TSets.Where(a=>a.Name.StartsWith("ScanEmail")); 

     } 

, который вызывается следующим образом: -

var emailsTo = repository.getAllScanEmailTo().ToList(); 

теперь я попытался изменить выше чтобы использовать асинхра так я доработан мой репозиторий метода быть следующим: -

public async Task< IQueryable<TSet>> getAllScanEmailTo() 
     { 
     return await t.TSets.Where(a=>a.Name.StartsWith("ScanEmail")); 

     } 

, но я получил следующее сообщение об ошибке: -

Error 1 Cannot await 'System.Linq.IQueryable<Final.Models.TSet>' 
+2

Почему вы ожидали, что он будет работать? 'IQueryable' не является ожидаемым, как задача. – sstan

+1

'IQueryable' - это * запрос *, а не операция, асинхронная или другая. 'ToList' или' ToListAsync' - это операции. Кроме того, вы можете использовать 'await' только для методов, возвращающих' Task' или awaiter –

+0

@PanagiotisKanavos, но я не могу изменить метод моего репозитория как задачу, так как я получу ошибку, упомянутую выше. –

ответ

7

Поскольку вы упомянули, что используете EF6, вы можете использовать .ToListAsync(). Тогда вы можете await.

+0

Да, я использую EF 6 ,,, но проблема в том, что я не могу применить .ToListAsync() в следующем "repository.getAllScanEmailTo(). ToListAsync();" потому что я получаю сообщение об ошибке, что IQuerable не содержит определения ToListAsync() –

+0

@johnG гарантирует правильность настройки пространства имен 'using'. https://msdn.microsoft.com/en-us/data/jj819165.aspx –

+0

yes my using namespaces установлены правильно, так как у меня есть другой метод, который я могу определить .Tolistasync() на нем, может быть проблема в том, что Я не могу использовать async с .where? –