从两个表中选择不同的值组合

时间:2019-05-04 20:25:41

标签: .net linq entity-framework-core

我有三个表:部分用户组织。零件对用户具有外键,而用户对组织具有外键。我需要找到所有现有零件的user.id和organization.name的所有不同组合。

这是我当前的LINQ查询:

var partUsers = dbContext.Parts
    .GroupBy(p => p.UserId)
    .Select(g => new
    {
        UserId = g.Key,
        OrgName = g.First().Organization.Name
    });

它可以正常工作并给出预期的结果时,它会打印各种关于可能不可预测的结果的警告(GroupBy无顺序),并且大多数警告都是在本地评估的。因此,由于进行了First调用,该查询无法转换为SQL。

如何使用LINQ和Entity Framework Core 2.2有效地获得正确的结果?我不想重复所有所有部分,因为那可能比用户要多得多。

简化的类:

class Part
{
    [Key]
    public int Id { get; set; }

    [ForeignKey(nameof(Organization))]
    public int OrganizationId { get; set; }

    public virtual Organization Organization { get; set; }

    [ForeignKey(nameof(User))]
    public int UserId { get; set; }

    public virtual User User { get; set; }
}

class User
{
    [Key]
    public int Id { get; set; }

    [ForeignKey(nameof(Organization))]
    public int OrganizationId { get; set; }

    public virtual Organization Organization { get; set; }
}

public class Organization
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
}

0 个答案:

没有答案