You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于EF Core与LINQ实现适配Kendo Grid的用户订单矩阵网格

实现方案

1. 预查询基础数据(减少数据库交互次数)

优先一次性拉取全量所需数据,避免循环触发数据库查询:

// 启用AsNoTracking提升查询性能
var allUsers = await _context.Users.AsNoTracking().ToListAsync();
var allCustomers = await _context.Customers.AsNoTracking().ToListAsync();
var allUserOrders = await _context.UserOrders.AsNoTracking().ToListAsync();

2. 定义矩阵绑定模型

适配Kendo Grid的绑定逻辑,用字典存储动态列对应的数值:

public class UserOrderMatrixRow
{
    // 行固定字段:用户基础信息
    public int UserId { get; set; }
    public string UserName { get; set; }
    // Key为客户ID,Value为对应位置的订单数值,无关联记录则为null
    public Dictionary<int, decimal?> CustomerOrderValues { get; set; } = new();
}

3. 用LINQ生成矩阵数据

先构造关联映射字典提升查找效率,再批量生成矩阵行:

// 构造用户+客户维度的订单数值映射字典,查找时间复杂度O(1)
var orderMapping = allUserOrders.ToDictionary(
    keySelector: o => (o.UserId, o.CustomerId),
    elementSelector: o => o.OrderValue
);

// 生成矩阵数据
var matrixResult = allUsers.Select(user => 
{
    var row = new UserOrderMatrixRow
    {
        UserId = user.Id,
        UserName = user.Name
    };
    // 填充所有客户对应的订单数值
    foreach (var customer in allCustomers)
    {
        row.CustomerOrderValues[customer.Id] = orderMapping.TryGetValue((user.Id, customer.Id), out var val) ? val : null;
    }
    return row;
}).ToList();

4. Kendo Grid绑定适配

可根据全量客户列表动态生成Grid列,无需硬编码列配置:

// 后端MVC绑定示例(前端JS绑定逻辑同理,动态生成columns配置即可)
@(Html.Kendo().Grid<UserOrderMatrixRow>()
    .Name("userOrderMatrix")
    .Columns(col =>
    {
        col.Bound(r => r.UserName).Title("用户").Width(120);
        // 动态生成所有客户列
        var customerList = ViewBag.AllCustomers as List<Customer>;
        foreach (var customer in customerList)
        {
            col.Bound(r => r.CustomerOrderValues[customer.Id])
                .Title(customer.Name)
                .Width(100);
        }
    })
    .DataSource(ds => ds.Ajax().Read(r => r.Action("LoadMatrixData", "YourControllerName")))
    .Sortable()
    .Scrollable()
)

性能优化建议

如果数据量超过10万条,建议:

  • 加数据库索引覆盖UserOrder表的UserId、CustomerId、OrderValue字段
  • 采用分页查询代替全量拉取
  • 前端开启Kendo Grid的虚拟滚动功能

内容的提问来源于stack exchange,提问作者Rohlik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:03