У меня есть три таблицы: части , пользователи и организации .Часть имеет внешний ключ для пользователя, а пользователь имеет внешний ключ для организации.Мне нужно найти все различные комбинации 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 без порядка) и, что самое главное, оценивается локально.Таким образом, этот запрос не может быть переведен в SQL из-за вызова First
.
Как получить эффективный результат с 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; }
}