在下面,我在LINQ Includes中使用lambda表达式进行1级访问,以使用三个实体获取客户列表,主要的是针对所有客户,并且仅具有2个属性Id和bool:IsCompany,第二个仅具有那些是公司,而第三个只有那些是个人。下面的代码使用.Net Core 2.2进行工作,当我更新到3.0时,它停止工作,并且我能找到的大多数解决方案都是多层次的,例如 Include -> ThenIclude 在这里不能工作。 而3.0 breaking changes版没有提及这种情况。
public async Task<ActionResult<IEnumerable<CustomersListVM>>> GetCustomers()
{
List<CustomersListVM> customerList = await _context.Customers
.Include(p => p.Company.Name)
.Include(p => p.Individual.Name)
.Select(p => new CustomersListVM
{
Id = p.Id,
CustomerId = p.CustomerId,
Name = p.IsCompany == true ? p.Company.Name : p.Individual.LastName + ' ' + p.Individual.FirstName
}).ToListAsync();
return customerList;
}
有什么想法吗?
答案 0 :(得分:2)
Include
子句用于检索相关对象。应该使用指定链接的实体的lambda来调用方法,但不要声明.Name
(因为这是一个属性):
.Include(p => p.Company)
.Include(p => p.Individual)
然后在Select
方法中,指定只需要公司/个人的Name
。