我正在尝试获取同一查询中包含其父母的客户列表。
有没有办法在投影内只指定一次子查询?
Parent = new NameGuidResponse(
_context.Customers.FirstOrDefault(parent => parent.Hierarchy == c.Hierarchy).Id,
_context.Customers.FirstOrDefault(parent => parent.Hierarchy == c.Hierarchy).Name
)
public record NameGuidResponse(Guid Id, string Name);
var pagedResult = await query
.OrderBy(c => c.Name)
.Select(c => new Response
{
Id = c.Id,
Name = c.Name,
Address = c.Address,
City = c.City,
ZipCode = c.ZipCode,
Email = c.Email,
Phone = c.Phone,
Markup = c.Markup,
Parent = new NameGuidResponse(
_context.Customers.FirstOrDefault(parent => parent.Hierarchy == c.Hierarchy).Id,
_context.Customers.FirstOrDefault(parent => parent.Hierarchy == c.Hierarchy).Name
)
})
.AsPaged(request.Page, request.PageSize);
您可以使用
Join()
方法:
var pagedResult = await query
.OrderBy(c => c.Name)
.Join(_context.Customers,
c => c.Hierarchy,
parent => parent.Hierarchy,
(c, parent) => new Response
{
Id = c.Id,
Name = c.Name,
Address = c.Address,
City = c.City,
ZipCode = c.ZipCode,
Email = c.Email,
Phone = c.Phone,
Markup = c.Markup,
Parent = new NameGuidResponse(parent.Id, parent.Name)
})
.AsPaged(request.Page, request.PageSize);
public async Task<IEnumerable<DenoChainNameQuerySelectResult>> GetDenominationChainNameListAsync()
{
IEnumerable<DenoChainNameQuerySelectResult> denoChainNames = (from d in _dbContext.SL_SETP_DENOMINATION
join dr in _dbContext.IV_SETP_CHAIN on d.IV_CHAIN_ID equals dr.IV_CHAIN_ID
select new DenoChainNameQuerySelectResult
{
SYS_COMPANY_ID = d.SYS_COMPANY_ID ,
IV_CHAIN_ID = d.IV_CHAIN_ID,
IV_CHAIN_DESC = dr.IV_CHAIN_DESC
}).Distinct().AsEnumerable();
return denoChainNames;
}