You need to enable JavaScript to run this app. C#使用Linq合并两列表作为GridView数据源时setup_fee总为第一行值问题
优惠活动
大模型
产品
解决方案
定价
更多

C#使用Linq合并两列表作为GridView数据源时setup_fee总为第一行值问题

问题原因

核心错误是使用了Zip方法做集合合并,没有按关联键匹配。Zip方法的逻辑是严格按两个集合的元素索引位置一一配对,只要products.Item1和productsCurrencies.Item1的排序规则不一致、或者元素数量不匹配,就会出现配对错误。你遇到的setup_fee始终等于第一行值的情况,就是因为两个集合排序不匹配,导致所有产品都和第一条货币数据配对了。

修复方案

将Zip替换为LINQ的Join方法,以两个类共有的product_number作为关联键做匹配,代码如下:

// Get models
var products = await API.Zelkon.Products.GetAll();
var productsCurrencies = await API.Zelkon.CurrenciesBackend.Get();

// 按product_number关联两个集合,替代原来的Zip逻辑
var results = products.Item1.Join(
    productsCurrencies.Item1,
    p => p.product_number,
    c => c.product_number,
    (p, c) => new { Product = p, Currency = c }
);

// Create datasource
var datasource = results.Select(r => new { r.Currency.price, r.Currency.setup_fee, r.Product.product_number });

GridProducts.DataSource = datasource;
UI.CustomizeGridDefault(GridProducts);
补充说明
  • 如果需要保留没有对应货币信息的产品,可以改用LINQ左连接写法,避免过滤掉无货币数据的产品
  • 关联前可以先检查两个集合中product_number的唯一性,避免一对多关联产生重复的产品条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:06:03