powiedzmy, że mam proste klasy repozytorium, z jednym GetByNames
metodyJak zwrócić pusty IQueryable w metodzie repozytorium asynchroniczny
public class MyRepo
{
private readonly MyDbContext _db;
public MyRepo(MyDbContext db)
{
_db = db;
}
public IQueryable<MyObject> GetByNames(IList<string> names)
{
if (names== null || !names.Any())
{
return Enumerable.Empty<MyObject>().AsQueryable();
}
return _db.MyObjects.Where(a => names.Contains(a.Name));
}
}
Teraz, kiedy go używać z asynchronicznym EntityFramework ToListAsync()
przedłużacza
var myObjects = awawit new MyRepo(_db).GetByNames(names).ToListAsync();
Wystąpi, jeśli przejdę na pustą listę lub wartość pustą, ponieważ Enumerable.Empty<MyObject>().AsQueryable()
nie implementuje interfejsu IDbAsyncEnumerable<MyObject>
.
Źródło IQueryable nie implementuje IDbAsyncEnumerable. Tylko źródła implementujące IDbAsyncEnumerable mogą być używane do asynchronicznych operacji Entity Framework. Aby uzyskać więcej informacji, patrz http://go.microsoft.com/fwlink/?LinkId=287068.
Więc moje pytanie brzmi, jak mogę wrócić pusty IQueryable<>
który implementuje IDbAsyncEnumerable
, bez uderzania bazy danych?
byłbym skłonny do wyjątek, jeśli parametr jest 'null' i zadzwoń zapytania jeśli tablica jest pusta. – DavidG
http://stackoverflow.com/a/26330298/870604 – ken2k