MVC Core Repository Query Data все сразу - PullRequest
0 голосов
/ 22 мая 2018

У нас есть транзакционная таблица Customer с несколькими таблицами поиска с внешними ключами.Мы хотим, чтобы 3 таблицы соединились.

Как мне убедиться, что сервисный звонок проводится один?Я не хочу захватывать все ненужные клиентские транзакции, а затем фильтровать их в памяти.Я хочу сделать один сервисный вызов, чтобы найти транзакцию клиента> 50 в одном запросе sql.

Репозиторий:

CustomerTransaction GetTransactionbyCustomerId(int customerid)
{
   var result = ct.CustomerTransaction.Where(x => x.CustomerTransactionId == customerid).ToList()
   return result;
}

Сервисный вызов:

void GetByCustomerTransactionGreaterthan50(int id)
{
   var newdata = CustomerTransaction.GetByCustomerTransactionId();
   nt.newdata.Where(x => x.PurchaseAmount > 50).ToList()
   return newdata;
}

Модели:

public class CustomerTransaction
{
    public int CustomerTransactionId{ get; set; },
    public int ProductTypeId {get; set; }, //joins to ProductTypeTable
    public int StatusID {get; set; },  //joins to StatusTypeTable
    public string DateOfPurchase{ get; set; },
    public int PurchaseAmount { get; set; },
}

public class ProductType
{
    public int ProductTypeId{ get; set; }
    public string ProductName { get; set; },
    public string ProductDescription { get; set; },
}

public class StatusType
{
    public int StatusId{ get; set; }
    public string StatusName{ get; set; },
    public string Description{ get; set; },

}

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вариант 1

Вам нужно будет настроить свой репозиторий, чтобы иметь возможность добавить к вашему запросу на уровне обслуживания:

Репозиторий:

IQueryable<CustomerTransaction> QueryTransactionbyCustomerId(int customerid)
{
   var result = ct.CustomerTransaction.Where(x => x.CustomerTransactionId == customerid);
   return result;
}

Вариант 2

Или для создания другого метода на уровне доступа к данным:

Репозиторий:

List<CustomerTransaction> GetTransactionByCustomerIdAndAmount(int customerid, int amount)
{
   var result = ct.CustomerTransaction.Where(x => x.CustomerTransactionId == customerid && x.PurchaseAmount > amount).ToList()
   return result;
}

В зависимости от вашей архитектуры, вы должны выбрать один из этих вариантов.

0 голосов
/ 22 мая 2018

Вы можете сделать Select проекцию до ToList(), чтобы убедиться, что ваше заявление sql, генерируемое EF, включает в себя только поля, которые вы проецируете.

Что-то вроде:

var result = ct.CustomerTransaction.Where(x => x.CustomerTransactionId == customerid).Select(x=> new CustomerTransaction()).ToList()

и для фильтрации вы можете включить свой фильтр в условие where:

ct.CustomerTransaction.Where(x => x.CustomerTransactionId == customerid && x.PurchaseAmount > 50)

или сделать так, чтобы ваш GetTransactionbyCustomerId возвращал запрос и фильтр, как вы делали это при вызове службы

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