C# 对列表进行二次排序。排序方法
我有一个通用列表,我正试图实现一个二级排序类型。我能够按一种类型对其进行良好排序,但在获得第二种排序时遇到困难 以下是我的工作内容: 当我调用排序时:C# 对列表进行二次排序。排序方法,c#,asp.net,sorting,C#,Asp.net,Sorting,我有一个通用列表,我正试图实现一个二级排序类型。我能够按一种类型对其进行良好排序,但在获得第二种排序时遇到困难 以下是我的工作内容: 当我调用排序时: List<Totals> totals = new LoadTotalList(); totals.Sort(Totals.Status); List totals=new LoadTotalList(); 总计.排序(总计.状态); 下面是Totals类: public class Totals { public stri
List<Totals> totals = new LoadTotalList();
totals.Sort(Totals.Status);
List totals=new LoadTotalList();
总计.排序(总计.状态);
下面是Totals类:
public class Totals
{
public string Status { get; set; }
public string Total { get; set; }
public string Cost { get; set; }
public static Comparison<Totals> StatusComp =
delegate(Totals item1, Totals item2)
{
return item1.Status.CompareTo(item2.Status);
};
public static Comparison<Totals> CostComp =
delegate(Totals item1, Totals item2)
{
return item1.Cost.CompareTo(item2.Cost);
};
}
公共类总计
{
公共字符串状态{get;set;}
公共字符串总计{get;set;}
公共字符串成本{get;set;}
公共静态比较状态comp=
代表(总计项目1、总计项目2)
{
返回item1.Status.CompareTo(item2.Status);
};
公共静态比较成本比较=
代表(总计项目1、总计项目2)
{
返回项目1.成本比较(项目2.成本);
};
}
我试着对第一种类型进行排序,然后对第二种类型进行排序,但似乎无法得到第二种排序类型。我知道可以使用OrderBy子句然后再使用BEY子句与Linq一起完成。但我还有其他选择吗。提前感谢您的帮助 很容易创建一个
比较
,它有一个主要比较,然后是一个次要比较:
public static class Comparisons
{
public static Comparison<T> Then<T>(this Comparison<T> primary,
Comparison<T> secondary)
{
// TODO: Nullity validation
return (x, y) =>
{
int first = primary(x, y);
return first != 0 ? first : secondary(x, y);
};
}
}
(您也可以轻松地对
IComparer
执行同样的操作。)创建一个比较
,它有一个主要比较,然后是一个次要比较:
public static class Comparisons
{
public static Comparison<T> Then<T>(this Comparison<T> primary,
Comparison<T> secondary)
{
// TODO: Nullity validation
return (x, y) =>
{
int first = primary(x, y);
return first != 0 ? first : secondary(x, y);
};
}
}
(您也可以轻松地对IComparer
执行相同操作。)您可以使用允许使用自定义比较委托的:
totals.Sort((t1, t2) => {
if (t1.Status != t2.Status) return t1.Status.CompareTo(t2.Status);
else return t1.Cost.CompareTo(t2.Cost);
});
您可以使用允许使用自定义比较委托的:
totals.Sort((t1, t2) => {
if (t1.Status != t2.Status) return t1.Status.CompareTo(t2.Status);
else return t1.Cost.CompareTo(t2.Cost);
});
谢谢你,乔恩!你让我站起来工作。我非常感谢。Jon,这个类不是应该是静态的吗,因为它是一个扩展方法?谢谢Jon!你让我站起来工作。我非常感激。Jon,这个类不应该是静态的,因为它是一个扩展方法吗?这也是一个很好的选择。这两个都是很好的答案。谢谢,请注意
=代码>始终使用顺序比较。在顺序比较中,字符串完全可能不相等,但是CompareTo
返回0。(参见文档中的string.CompareTo
)这也是一个很好的选择。这两个都是很好的答案。谢谢,请注意=代码>始终使用顺序比较。在顺序比较中,字符串完全可能不相等,但是CompareTo
返回0。(有关示例,请参见string.CompareTo
的文档。)