我有一个带有 MultiSelectFor 列的 Kendo UI MVC Core Orders 网格,它可以有多个客户。一切正常,但我有超过 2000 条记录,因此显示我的列表需要很长时间,因为需要从多对多表中获取相关数据。
我首先在 EF 中使用数据库,所以我搭建了 db 模型。
下面是 EF 生成的 Orders 表的模型(我已经删除了不必要的代码):
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; }
}
我的订单客户视图模型:
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 批处理(真)incell 类型的网格。