首页 > 解决方案 > LINQ - 加入 3 个表并选择一个包含两个列表的项目

问题描述

我有一个链接到地址和联系人表的公司表。一个公司可以有多个地址和联系人。

我将他们加入 LINQ 并使用 GroupBy 按公司分组,但我不确定如何从中获取地址和联系人列表。我见过的唯一例子只是试图为密钥获取一个列表。

如何编写 Select 以获取具有地址列表和联系人列表的单个公司?

以下是我到目前为止的内容:

var companiesList = 
    (from company in _context.Company
        join address in _context.Address
        on company.CompanyId equals address.CompanyId
        join contact in _context.Contact
        on company.CompanyId equals contact.CompanyId
        select new { company, address, contact })
    .GroupBy(x => x.company)
    .Select(group => new {
        Company = group.Key,
        Addresses = ??,
        Contacts = ??
    })
    .AsEnumerable();

标签: entity-frameworklinqjoingroup-by

解决方案


你非常接近答案。您可以使用

group.ToList().Select(c=>c.address),

group.ToList().Select(c=>c.contact)

完整示例

var companiesList  =  (from company in _context.Company
        join address in _context.Address
        on company.CompanyId equals address.CompanyId
        join contact in _context.Contact
        on company.CompanyId equals contact.CompanyId
        select new { company, address, contact })
    .GroupBy(x => x.company)
    .Select(group => new {
        Company = group.Key,
        Addresses = group.ToList().Select(c=>c.address),
        Contacts = group.ToList().Select(c=>c.contact)
    })

推荐阅读