EF Core Linq 查询从另一个表中选择两列

问题描述 投票:0回答:2

我正在尝试获取同一查询中包含其父母的客户列表。

有没有办法在投影内只指定一次子查询?

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);
.net linq entity-framework-core
2个回答
0
投票

您可以使用

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);

0
投票
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.