0
我有一个Kendo UI MVC Core Orders网格,它有一个可以有多个客户的MultiSelectFor列。所有工作都很好,但我有超过2000条记录,所以显示我的列表需要很长的时间,因为需要从多对多表中提取相关数据。用View Model优化相关数据查询
我首先使用数据库与EF,所以我脚手架db模型。
这里是由EF产生的订单表的模型(我已删除不必要的代码):
public partial class Orders
{
public Orders()
{
OrdersCustomers = new HashSet<OrdersCustomers>();
}
public int JobNo { get; set; }
public ICollection<OrdersCustomers> OrdersCustomers { get; set; }
}
我的视图模型OrdersVM(查看模型):
public class OrdersVM
{
public int JobNo { get; set; }
[UIHint("OrdersCustomersET")]
[Required(ErrorMessage = "A Customer is required")]
public IEnumerable<OrdersCustomersVM> OrdersCustomers { get; set; }
}
EF产生OrdersCustomers代码:
public partial class OrdersCustomers
{
public int JobNo { get; set; }
public string ClientId { get; set; }
public Customers Client { get; set; }
public Orders JobNoNavigation { get; set; }
}
我OrdersCustomers视图模型:
public class OrdersCustomersVM
{
public int JobNo { get; set; }
public string ClientName { get; set; }
public string ClientId { get; set; }
}
我的控制器:
public IActionResult Read([DataSourceRequest] DataSourceRequest request)
{
var List = _context.Orders
.Select(c => new OrdersVM
{
JobNo = c.JobNo,
OrdersCustomers = c.OrdersCustomers.Select(t => new OrdersCustomersVM
{
ClientId = t.ClientId,
ClientName = t.Client.ClientName
}),
}).OrderByDescending(c => c.JobNo).Where(r =>r.OfficeId == _getempinfo.GetOID(User.Identity.Name);
return Json(List.ToDataSourceResult(request));
}
我想与任何缓存等优化我的代码,因为它是没有意义的,有这么多的SQL查询(我可以看到SQL Server Profiler中) 。
我的剑道网格是一个Ajax批处理(true)网格类型的网格。