Linq Включить и Где условия на отношениях между родителями и детьми - PullRequest
0 голосов
/ 04 января 2019

Это мой сценарий:

У меня есть модель Company:

public class Company
{
    [Key]
    public int Id      { get; set; }
    public string Name { get; set; }

    public virtual List<Product>  Products  { get; set; }
    public virtual List<Employee> Employees { get; set; }
}

и конечная точка API, которая выглядит следующим образом:

    //GET: api/company/Profile?id=stringid
    [Route("Profile")]
    [ResponseType(typeof(Company))]
    public IHttpActionResult<Company> GetEmployeeCompany(string userId)
    {
         var company = db.Companies
                 .Include(p => p.Products)
                 .Where(u => u.Employees.userId == userId);

         return Ok(company)

        //that return dont work ofc, but i just want to show what im talking about
    }

У меня вопрос, как найти Company с его продуктами, чтобы этот работник работал? У сотрудника есть уникальный идентификатор пользователя, который является строкой. Я передаю эту строку по конечной точке в вызове API

EDIT

Employee класс

public class Employee
{
    [Key]
    [ForeignKey("User"), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string UserId { get; set; }
    public int CompanyId { get; set; }

    public virtual Company         Company { get; set; }
    public virtual ApplicationUser User    { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Я думаю, вам нужно включить внутреннюю проверку того, есть ли Any сотрудник в пределах Company с заданным userId:

//GET: api/company/Profile?id=stringid
[Route("Profile")]
[ResponseType(typeof(Company))]
public IHttpActionResult<Company> GetEmployeeCompany(string userId)
{
    var company = db.Companies
             .Include(p => p.Products)
             .FirstOrDefault(u => u.Employees.Any(e => e.UserId == userId));

     if (company == null)
     {
         return NotFound();
     }

     return Ok(company);
}
0 голосов
/ 04 января 2019

Поскольку вы действительно выполняете поиск по идентификатору профиля, вы можете загрузить сотрудника по идентификатору профиля и указать его компанию и продукты компании:

var employee = db.Employees
    .Include(e => e.Company.Products)
    .SingleOrDefault(e => e.Id == userId);

return employee.Company.Products; // to return company's products
return employee.Company; // to return company, will contain all products

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...