Я использую Ef6 и хочу сделать следующий запрос полностью асинхронен:Как асинхронно вызывать базу данных с субрекциями с использованием LINQ?
await MyDataContext.ADbSet.
First(a => a.Something == "Something").
ASubCollection.
Select(x => new { x.SubCollectionId }).
ToListAsync();
Это не работает, я считаю, из-за First()
возвращение реального объекта и доступа к ASubCollection
будучи ICollection
, не IQueryable
,
я смог обойти это с помощью следующего кода:
await MyDataContext.ADbSet.
Where(a => a.Something == "Something").
SelectMany(a => a.ASubCollection).
Select(x => new { x.SubCollectionId }).
ToListAsync();
Однако, это, кажется, «Hacky», как я использую Where(...)
, когда я должен использовать в First()
, как я знаю, что во время компиляции что будет только один элемент, удовлетворяющий запросу. Есть ли лучший способ сделать это?
Попробуйте '.Take (1)'. – Vladimir
@ Владымир Фролов в какой момент? Пожалуйста, дополните. – Alex
'.ADbSet.Where (a => a.Something ==« Что-то »). Возьмите (1)' – Vladimir