我需要通過 id 獲取一個集合,它具有IList<AnimeTitle> AnimeTitles,我需要將其轉換為IQueryable<AnimeTitle>并投影到BriefTitleVW最終以IQueryable<BriefTitleVW>.
在示例代碼中,我使用 AutoMapper 進行轉換ProjectTo<BriefTitleVM>(_mapper.ConfigurationProvider),但這是不可能的,因為此方法只能轉換IQueryable<AnimeTitle>為IQueryable<BriefTitleVM>.
所以它歸結為轉換IQueryable<IList<AnimeTitle>>為IQueryable<AnimeTitle>.
問題:如何做到這一點?
var titles = await _dbContext.AnimeCollections
.Where(c => c.Id == request.CollectionId && c.UserId == request.UserId)
.Select(c => c.AnimeTitles)
.ProjectTo<BriefTitleVM>(_mapper.ConfigurationProvider)
uj5u.com熱心網友回復:
你可以改變:
.Select(c => c.AnimeTitles)
到:
.SelectMany(c => c.AnimeTitles)
當您有一個“X 串列串列”(您有一個AnimeCollection內部物件串列db.AnimeCollections,并且每個物件中AnimeCollection都有一個物件串列)時,您可以使用 SelectMany 將其變成一個直接的“X 串列”。SelectMany,在概念上是這樣做的:AnimeTitleAnimeTitles
List<AnimeTitle> result = new();
foreach(AnimeCollection c in db.AnimeCollections)
result.AddRange(c.AnimeTitles);
return result;
因此,您的一般模式是.SelectMany提供一個 lambda,它在串列中的每個物件上選擇一個集合,并生成所有集合中所有專案的單個串列
//one list of all child items
parentCollection.SelectMany(item => item.ChildCollection)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468883.html
