Получить все сущности, указывающие на одну и ту же ссылку на внешний ключ в Entity Framework - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть 3 класса моделей следующим образом:

public class Bill
{
    [Key]
    public int BillId { get; set; }
    public string BillNumber { get; set; }
    public string BillStatus { get; set; }
    public int Amount { get; set; }
}

public class FuelExpense
{
    [Key]
    public int FuelExpenseId {get; set; }
    public string Vehicle { get; set; }
    public FuelTypesEnum FuelType { get; set; }
    [ForeignKey("Bill")]
    public int BillId { get; set; }
    public virtual Bill Bill { get; set; }
}

public class BooksAndNotesExpense
{
    [Key]
    public int BooksAndNotesExpenseId { get; set; }
    public string Publication { get; set; }
    [ForeignKey("Bill")]
    public int BillId { get; set; }
    public virtual Bill Bill { get; set; }
}

Я хочу получить все ожидающие счета с соответствующим идентификатором расходов. Например, мои таблицы выглядят так:

Bills table

FuelExpenses table

BooksAndNotesExpenses table

Мне нужен такой результат:

Result table

Как получить его в Entity Framework в ASP. NET MVC с использованием C#? Если есть лучший способ реструктурировать мои модели, пожалуйста, дайте мне знать. Заранее спасибо!

1 Ответ

1 голос
/ 22 апреля 2020

Я не знаю много о Entity FrameWork, но похоже, что basi c linq может сделать

var data =
dbContext.FuelExpense.Where(x => x.Bill.BillStatus == 'Pending')
.Select(x => new Data(x.BillId, x.Bill.BillNumber, x.Bill.BillStatus, x.Bill.Amount, x.FuelExpenseId))
.Concat(
dbContext.BooksAndNotesExpense.Where(x => x.Bill.BillStatus == 'Pending')
.Select(x => new Data(x.BillId, x.Bill.BillNumber, x.Bill.BillStatus, x.Bill.Amount, x.BooksAndNotesExpenseId))
)
.ToList()

ИЛИ

var data = 
dbContext.BooksAndNotesExpense
  .Join(
    dbContext.Bill,
    booksExpense => booksExpense.BillId,
    bill => bill.BillId,
    (booksExpense , bill) => new Data(bill.BillId, bill.BillNumber, bill.BillStatus, bill.Amount, booksExpense.FuelExpenseId)
  )
  .Where(x => BillStatus == 'Pending')
  .Concat(
    dbContext.FuelExpense
    .Join(
      dbContext.Bill,
      fuelExpense => fuelExpense.BillId,
      bill => bill.BillId,
      (fuelExpense, bill) => new Data(bill.BillId, bill.BillNumber, bill.BillStatus, bill.Amount, fuelExpense.BooksAndNotesExpenseId)
    )
    .Where(x => BillStatus == 'Pending')
)
.ToList()
public class Data {
  public Data(int billId, string billNumber, string billStatus, int amount, int expenseId) {
   BillId = billId;
   BillNumber = billNumber;
   BillStatus = billStatus;
   Amount = amount;
   ExpenseId = expenseId;
  }
  public int BillId { get ; set; }
  public string BillNumber { get ; set; }
  public string BillStatus { get ; set; }
  public int Amount { get ; set; }
  public int ExpenseId { get ; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...