我试图在list对象上应用自定义orderby逻辑。 目前,我正在使用list对象填充plan max和plan deductible的下拉列表,在应用顺序之后,以下值0作为plan deductible的默认值。 但是我想要自定义这个计划免赔额的顺序,而不是0(零)我想要显示下一个最高的可用值(即在这种情况下的100)。 这是输出下拉列表
我已经浏览了下面的链接并应用了这个逻辑,但是它在我的情况下不起作用Linq OrderBy custom order custom Linq Ordering
这是代码
int[] customOrder = { 100, 0, 50, 150, 250, 500, 1000, 2500, 5000, 10000, 50000 };
var Result = lstQuatationResult
.OrderBy(x => x.planMaximum)
.OrderBy(x => x.planDeductible)
.OrderBy(x => Array.IndexOf(customOrder, x));
提前谢谢你。
首先,每个orderby
子句都将重置以前的排序(如果实际上它将执行任何排序)。 使用thenby
方法(或删除以前的订单):
var Result = lstQuatationResult
.OrderBy(x => x.planMaximum)
.ThenBy(x => x.planDeductible)
.ThenBy(x => Array.IndexOf(customOrder, x)); // need to select some int field here
同样正如我在代码中提到的-您需要在最后的orderby
子句中选择x
的字段,因为当前您的数组.indexof
正在使用indexof(Array Array,object value)
重载,并尝试在int
'的数组中查找对象,并为所有传递的元素返回-1
,基本上保持以前的顺序:
Console.WriteLine(Array.IndexOf(customOrder, new object())); // -1