EF - присоединение к запросу с использованием параметра Id из контроллера с предложением where - PullRequest
0 голосов
/ 06 июня 2019

У меня есть две таблицы, код операции и коды подопераций, и мне нужно вернуть все подкоды каждого кода, только с активными подкодами

public class OperationCode: Entity
{ 
    public guid Id.
    public bool Active{ get; set; }
    public bool Excluded{ get; set; }
    public string Code { get; set; }
    public virtual ICollection<SubOperationCode> SubOperationCode{ get; set; }
}

public class SubOperationCode: Entity
{
    public guid Id.
    public bool Active{ get; set; }
    public bool Excluded{ get; set; }
    public string Code { get; set; }
    public virtual OperationCode OperationCode{ get; set; }
 }

Я пытаюсь использовать что-то подобное,но это не сработало

public override OperationCode getById(Guid id)
{
      var result = Db.SubOperationCode.Join(Db.OperationCode,
            sub => sub.Id == id,
            code => code.Id,
            (sub, code) => new { sub, code }).toList();
      return result 
 }

Ответы [ 3 ]

0 голосов
/ 06 июня 2019

Вы можете использовать следующие

public override OperationCode getById(Guid id)
{
  var result = Db.SubOperationCode.Join(Db.OperationCode,
        sub => sub.Id,
        code => code.Id,
        (sub, code) => new { sub, code })
        Where(x => sub.Id == id).toList();
  return result 
}
0 голосов
/ 06 июня 2019

Вы можете попробовать это:

public override OperationCode getById(Guid id)
{
    return Db.OperationCode.Include(o => o.SubOperationCode)
        .FirstOrDefault(o => o.Id == id && o.SubOperationCode.Any(so => so.Active))
}
0 голосов
/ 06 июня 2019

Вам не нужно JOIN - используйте свои свойства навигации, затем спроецируйте в список результатов (в данном случае анонимный, но может быть моделью).

var operationsWithActiveSubOps = Db.OperationCodes
     .Include(o => o.SubOperationCode)
     .Select(o => new {
          OperationId = o.Id,
          OperationCode = o.Code,
          ActiveSubOperations = o.SubOperationCode.Where(so => so.Active)
     })
     .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...