提问者:小点点

使用LINQ的自定义排序


我试图在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));

提前谢谢你。


共1个答案

匿名用户

首先,每个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