EF Core:如何连接两个实体并将结果存入Item实体列表?
解决方法
你的代码现在有两个问题导致无法直接存入List<Item>:
- Join操作后返回的是匿名类型集合(
new { items = l, header = r }),不是Item类型 - 没有执行查询并转换为列表(缺少
ToList()方法)
修正后的代码如下:
List<Item> items = _dbContext.Items .Join(_dbContext.Header, l => l.HeaderId, r => r.Id, (l, r) => new { Item = l, Header = r }) .Where(p => string.IsNullOrEmpty(reportFilterDTO.HeaderDescription) || p.Header.Description.Contains(reportFilterDTO.HeaderDescription)) // 投影回Item实体 .Select(p => p.Item) // 执行查询并转换为List<Item> .ToList();
补充说明
如果你的需求是既要关联Header做筛选,又要获取包含Header信息的Item,那可以考虑用Include方法(前提是Item实体里有导航属性指向Header),代码会更简洁:
List<Item> items = _dbContext.Items .Include(i => i.Header) // 加载关联的Header .Where(i => string.IsNullOrEmpty(reportFilterDTO.HeaderDescription) || i.Header.Description.Contains(reportFilterDTO.HeaderDescription)) .ToList();
注意:使用Include的前提是你的Item实体定义了public Header Header { get; set; }这样的导航属性,并且EF Core已经配置好两者的关联关系。
内容的提问来源于stack exchange,提问作者Dot NET Lover
相关产品推荐
相关产品推荐

