我有三个表:部分,用户和组织。零件对用户具有外键,而用户对组织具有外键。我需要找到所有现有零件的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; }
}