5

我有一个自定义类型的列表。自定义类型是

public class PossibleMatch
    {
        public PossibleMatch()
        {
            StoreIds = new List<long>();
            OrderLineIds = new List<long>();
        }
        public IList<long> StoreIds { get; set; }
        public IList<long> OrderLineIds { get; set; }
    }

我必须以这样一种方式对列表进行排序,以使商店数量较少且订单行数量较多的项目应位于顶部。

提前致谢。

4

2 回答 2

8

LINQ 有这方面的方法。

尝试以下操作,首先按 StoreId 最少的匹配进行排序,然后再按 OrderLineId 最多的匹配进行子排序:

 var possibleMatches = new List<PossibleMatch>();
 var ordered = possibleMatches.OrderBy(pm => pm.StoreIds.Count).ThenByDesc(pm => pm.OrderLineIds.Count);

或者先按具有最多 OrderLineId 的匹配进行排序,然后再按具有最少 StoreId 的匹配进行子排序:

var ordered = possibleMatches.OrderByDesc(pm => pm.OrderLineIds.Count).ThenBy(pm => pm.StoreIds.Count);
于 2012-11-02T11:39:32.253 回答
4

构建自定义比较器:

public class PossibleMatchComparer: IComparer<PossibleMatch>
{
    public int Compare(PossibleMatch x, PossibleMatch y)
    {
        if (x.StoreIds.Count < y.StoreIds.Count) return -1;
        if (x.StoreIds.Count > y.StoreIds.Count) return 1;

        return y.OrderLineIds.Count - x.OrderLineIds.Count;
    }
}

所以你可以使用:

list.Sort(new PossibleMatchComparer());
于 2012-11-02T11:44:29.057 回答