1

获得了“ClientContacts”列表——其中有一个 LastName(如果是人类)或一个 EntityName(如果是通用联系人,例如 techsupport@mycompany.com)。

我想要做的是按姓氏字母顺序排序此列表,并且在不存在姓氏的情况下(换句话说,存在实体名),将该实体名视为姓氏,并继续排​​序,就好像它是姓氏一样。

所以想要的结果看起来像:

  1. 邦德詹姆斯
  2. 客户支持
  3. 盖茨比尔
  4. 技术支持
  5. 威廉姆斯罗宾

这会导致崩溃,因为它会遇到一些没有姓氏的 ClientContact。

clientContactList.Sort(
    delegate(ClientContact c1, ClientContact c2) 
        { return c1.LastName.CompareTo(c2.LastName); });

以下允许我在不崩溃的情况下通过,它按 ClientContact EntityName 的第一个排序,然后是 LastNames:

            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);
                }

            }
        });

导致:

  1. 客户支持
  2. 技术支持
  3. 邦德詹姆斯
  4. 盖茨比尔
  5. 威廉姆斯罗宾

我怎样才能让我的列表排序看起来像上面想要的结果?

4

3 回答 3

6

尝试使用此比较:

(c1.LastName ?? c1.EntityName).CompareTo(c2.LastName ?? c2.EntityName)
于 2012-04-06T03:10:53.243 回答
2

如果你使用 LINQ,你可以这样做:

var sortedList = list.OrderBy( x => x.LastName ?? x.EntityName );
于 2012-04-06T03:12:36.543 回答
0

你可以这样做:

list.Sort(delegate(ClientContact c1, ClientContact c2)
{
    return !string.IsNullOrEmpty(c1.LastName) ?
        c1.LastName.CompareTo(c2.LastName) :
        c1.EntityName.CompareTo(c2.LastName);         
});
于 2012-04-06T03:12:25.317 回答