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

使用LINQ无法基于另一个列表对Variant列表排序

问题原因

你写的OrderBy逻辑里,MaterialOrderdetails.Where(b => b.ItemNo == a.ItemNo)返回的是匹配当前Variant的MaterialOrder集合,而集合类型没有实现IComparable接口,OrderBy无法基于集合进行排序,所以抛出这个错误。

解决方案

第一步:把MaterialOrder转成字典提升查找效率

因为要频繁根据ItemNo找对应的排序号,用字典可以把查找复杂度从O(n)降到O(1),避免500+条Variant每条都遍历100条MaterialOrder:

// 把MaterialOrder转成ItemNo为键、Orderno为值的字典
var orderDict = MaterialOrderdetails.ToDictionary(mo => mo.ItemNo, mo => mo.Orderno);

第二步:基于字典的排序值进行排序

用TryGetValue处理两种情况:在MaterialOrder里存在的Variant用对应的Orderno排序,不存在的给一个默认值(比如int.MaxValue让它们排到最后,或者0排最前面,根据你的需求调整):

variants = variants.OrderBy(a => 
    orderDict.TryGetValue(a.ItemNo, out var order) ? order : int.MaxValue
).ToList();

补充说明

如果确定每个Variant的ItemNo都能在MaterialOrder里找到(不会有不存在的情况),也可以直接用orderDict[a.ItemNo],但用TryGetValue更安全,避免出现KeyNotFoundException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:12:09