如何将 IQueryable<IList<AnimeTitle>> 转换为 IQueryable<AnimeTitle>
How to convert IQueryable<IList<AnimeTitle>> to IQueryable<AnimeTitle>
我需要通过 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)
您可以更改:
.Select(c => c.AnimeTitles)
收件人:
.SelectMany(c => c.AnimeTitles)
当你有一个“X列表的列表”时(你在db.AnimeCollections
中有一个AnimeCollection
个对象的列表,每个AnimeCollection
都有一个[=17=的列表] 中的对象 AnimeTitles
) 您可以使用 SelectMany 将其变成一个直接的“X 列表”。 SelectMany,概念上是这样做的:
List<AnimeTitle> result = new();
foreach(AnimeCollection c in db.AnimeCollections)
result.AddRange(c.AnimeTitles);
return result;
因此,您的一般模式是向 .SelectMany
提供一个 lambda,该 lambda 在列表中的每个对象上选择一个集合,然后生成所有集合中所有项目的单个列表
//one list of all child items
parentCollection.SelectMany(item => item.ChildCollection)
我需要通过 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)
您可以更改:
.Select(c => c.AnimeTitles)
收件人:
.SelectMany(c => c.AnimeTitles)
当你有一个“X列表的列表”时(你在db.AnimeCollections
中有一个AnimeCollection
个对象的列表,每个AnimeCollection
都有一个[=17=的列表] 中的对象 AnimeTitles
) 您可以使用 SelectMany 将其变成一个直接的“X 列表”。 SelectMany,概念上是这样做的:
List<AnimeTitle> result = new();
foreach(AnimeCollection c in db.AnimeCollections)
result.AddRange(c.AnimeTitles);
return result;
因此,您的一般模式是向 .SelectMany
提供一个 lambda,该 lambda 在列表中的每个对象上选择一个集合,然后生成所有集合中所有项目的单个列表
//one list of all child items
parentCollection.SelectMany(item => item.ChildCollection)