按两个变量对列表进行排序
本文关键字:列表 排序 变量 两个 | 更新日期: 2023-09-27 18:30:25
>得到了一个"客户联系人"---列表,这些具有姓氏(如果是人类)或实体名称(如果是通用联系人,例如 techsupport@mycompany.com)。
我想做的是按姓氏的字母顺序对这个列表进行排序,在没有姓氏存在的情况下(换句话说,实体名称存在),将该实体名称视为姓氏,并继续排序,就好像它是姓氏一样。
因此,所需的结果如下所示:
- 邦德·詹姆斯
- 客户支持
- 盖茨法案
- 技术支持
- 威廉姆斯·罗宾
这会导致崩溃,因为它会遇到一些没有姓氏的客户端联系人。
clientContactList.Sort(
delegate(ClientContact c1, ClientContact c2)
{ return c1.LastName.CompareTo(c2.LastName); });
以下内容允许我通过而不会崩溃,它按客户联系实体名称的第一个,然后是姓氏对其进行排序:
list.Sort(delegate(ClientContact c1, ClientContact c2) {
try
{
return c1.LastName.CompareTo(c2.LastName);
}
catch
{
try
{
return c1.EntityName.CompareTo(c2.LastName);
}
catch
{
return c1.EntityName.CompareTo(c2.EntityName);
}
}
});
导致:
- 客户支持
- 技术支持
- 邦德·詹姆斯
- 盖茨法案
- 威廉姆斯·罗宾
如何使我的列表排序为看起来像上述所需结果?
尝试使用此比较:
(c1.LastName ?? c1.EntityName).CompareTo(c2.LastName ?? c2.EntityName)
如果使用 LINQ,则可以这样做:
var sortedList = list.OrderBy( x => x.LastName ?? x.EntityName );
你可以
这样做:
list.Sort(delegate(ClientContact c1, ClientContact c2)
{
return !string.IsNullOrEmpty(c1.LastName) ?
c1.LastName.CompareTo(c2.LastName) :
c1.EntityName.CompareTo(c2.LastName);
});