Я пытаюсь собрать всю информацию о конкретном клиенте из моей базы данных, но я не уверен, как собрать всю информацию в оптимизированном запросе, не запрашивая базу данных несколько раз.
У меня есть следующие таблицы: https://i.imgur.com/o9PRrF1.png
Я хочу сопоставить 1 клиента с предоставленным CustomerId.Затем соберите все карты, счета, кредиты и постоянные заказы, связанные с этим счетом.
Мне удалось это сделать, но я использовал несколько запросов к своему _context.Я хочу узнать, как выполнять оптимизированные запросы при объединении нескольких таблиц.
Может ли кто-нибудь с большим опытом работы с Linq предоставить пример запроса для сбора всех карточек, счетов, ссуд и постоянных клиентов, связанных с клиентом с помощью CustomerIdиз "1"?
Я был бы очень признателен, чтобы получить несколько советов и помочь с этим, знание, как выполнять оптимизированные запросы, является очень важным навыком.Большое спасибо!: -)
Пример того, что я попробовал сам:
model.Customer = await _context.Customers.SingleOrDefaultAsync(c => c.CustomerId == request.CustomerId);
model.Accounts = await (from acc in _context.Accounts
join disp in _context.Dispositions on acc.AccountId equals disp.AccountId
where disp.CustomerId == request.CustomerId
select acc).ToListAsync();
model.Cards = await (from card in _context.Cards
join disp in _context.Dispositions on card.DispositionId equals disp.DispositionId
where disp.CustomerId == request.CustomerId
select card).ToListAsync();
Вот моя модель представления, которую я пытаюсь заполнить данными:
public class GetCustomerDetailsViewmodel
{
public Customer Customer { get; set; }
public List<Account> Accounts { get; set; } = new List<Account>();
public decimal TotalBalance { get; set; }
public List<Card> Cards { get; set; } = new List<Card>();
public List<PermenentOrder> PermantentOrders { get; set; } = new List<PermenentOrder>();
public List<Loan> Loans { get; set; } = new List<Loan>();
}
Клиенты имеют список диспозиций, таблицу связей между клиентами - счетами и картами.
**Customers**
PK CustomerId
public virtual ICollection<Disposition> Dispositions { get; set; }
**Cards**:
PK public int CardId { get; set; }
FK public int DispositionId { get; set; }
public virtual Disposition Disposition { get; set; }
**Dispositions**:
PK public int DispositionId { get; set; }
FK public int CustomerId { get; set; }
public int AccountId { get; set; }
public virtual Account Account { get; set; }
public virtual Customer Customer { get; set; }
public virtual ICollection<Card> Cards { get; set; }
**Accounts**:
PK public int AccountId { get; set; }
public virtual ICollection<Disposition> Dispositions { get; set; }
public virtual ICollection<Loan> Loans { get; set; }
public virtual ICollection<PermenentOrder> PermenentOrder { get; set; }
public virtual ICollection<Transaction> Transactions { get; set; }
**Loans**
PK public int LoanId { get; set; }
public virtual Account Account { get; set; }
**PermenentOrder**
PK public int OrderId { get; set; }
FK public int AccountId { get; set; }
public virtual Account Account { get; set; }