【发布时间】:2020-03-04 10:12:14
【问题描述】:
我正在一个项目中工作,该项目显示一个包含 ListDTO 的 IQueryable 的 BoardDto。每个 ListDTO 都包含一个 CardDTO 的 IQueryable。
如何在加载所有 ListDto 的情况下获取我的 BoardDto 对象,但只能使用他们的卡片 where CardType = 1 ?
public class BoardDTO
{
public int BoardId { get; set; }
public string Nome { get; set; }
public IQueryable<BoardListDTO> Lists { get; set; }
}
public class BoardListDTO
{
public int BoardListId { get; set; }
public string Name { get; set; }
public IQueryable<CardDTO> Cards { get; set; }
}
public class CardDTO
{
public long CardId { get; set; }
public CardType Type { get; set; }
}
编辑
下图说明了项目必须如何组成 DTO。
解决方案
这解决了我的问题:
var query = _context.Boards
.AsNoTracking()
.ProjectTo<BoardDto>(_mapper)
.Where(x => x.BoardId == id)
.Select(x => new BoardDto
{
BoardId = x.BoardId,
Name = x.Name,
Lists = x.Lists.Select(list => new BoardListSearchDTO
{
Cards = list.Cards.Where(x => x.Type == 1),
}).FilterLists(filterListsBy, listSearchValue)
});
【问题讨论】:
-
更好的标题可能是 ef-core 延迟加载和根据条件提前加载某些数据
标签: c# asp.net entity-framework linq iqueryable