C# Linq join将两个实体转化为DTO,但提供其中一个实体的计数。

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

我有以下问题。

        var result = this._context.Clients.Join(this._context.Jobs, c => c.Id, j => j.Id, (c, j) =>
            new ClientIndexDto
            {
                Id = c.Id,
                ClientNo = c.ClientNo,
                Active = c.Active,
                ClientFirstName = c.ClientFirstName,
                ClientLastName = c.ClientLastName,
                Company = c.Company,
                CompanyName = c.CompanyName,
                MobilePhone = c.MobilePhone,
                IsWarrantyCompany = c.IsWarrantyCompany,
                JobsCount = ???

            });

我想得到一个客户的工作数量... 有什么方法可以做到这一点?

c# linq asp.net-core entity-framework-core
1个回答
0
投票

按照朱先生和Sajid的建议,GroupJoin应该可以用。

var result = this._context.Clients.GroupJoin(this._context.Jobs, c => c.Id, j => j.Id, (c, j) =>
        new ClientIndexDto {
           Id = c.Id,
           ClientNo = c.ClientNo,
           Active = c.Active,
           ClientFirstName = c.ClientFirstName,
           ClientLastName = c.ClientLastName,
           Company = c.Company,
           CompanyName = c.CompanyName,
           MobilePhone = c.MobilePhone,
           IsWarrantyCompany = c.IsWarrantyCompany,
           JobsCount = j.Count()
        });

0
投票

你也可以试试这段代码

 var result = (from b in _context.Clients.ToList()
                      join a in _context.Jobs.ToList() on b.Id equals a.Id
                      group a by b into g
                      select new ClientIndexDto
                      {
                          Id = g.Key.Id,
                          ClientNo = g.Key.ClientNo,
                          Active = g.Key.Active,
                          ClientFirstName = g.Key.ClientFirstName,
                          ClientLastName = g.Key.ClientLastName,
                          Company = g.Key.Company,
                          CompanyName = g.Key.CompanyName,
                          MobilePhone = g.Key.MobilePhone,
                          IsWarrantyCompany = g.Key.IsWarrantyCompany,
                          JobsCount = g.Count()
                      });
© www.soinside.com 2019 - 2024. All rights reserved.