【问题标题】:LINQ - Joining 3 tables and selecting an item with two listsLINQ - 连接 3 个表并选择一个包含两个列表的项目
【发布时间】:2019-05-11 22:39:24
【问题描述】:

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

我正在使用 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();

【问题讨论】:

  • 你想在公司上加入两个聚合的公司。编写聚合。这为您提供了每家公司的信息。加入他们。 PS这肯定是一个常见问题。在考虑发布之前,请始终在谷歌上搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。 PS现在谷歌搜索'两个聚合不同的列linq site:stackoverflow.com'....

标签: entity-framework linq join group-by


【解决方案1】:

你已经很接近答案了。你可以使用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多