按两个变量对List进行排序

Cpt*_*rkt 1 c# sorting coding-style list

获得了"ClientContacts"列表---其中包含一个LastName(在人类的情况下)或一个EntityName(在通用联系的情况下,例如techsupport@mycompany.com).

我想要做的是按LastName按字母顺序排序此列表,如果不存在LastName(换句话说,存在EntityName),则将该EntityName视为LastName,并继续排​​序,就像它是LastName一样.

所以期望的结果如下:

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

这会导致崩溃,因为它遇到了一些没有LastName的ClientContacts.

clientContactList.Sort(
    delegate(ClientContact c1, ClientContact c2) 
        { return c1.LastName.CompareTo(c2.LastName); });
Run Code Online (Sandbox Code Playgroud)

以下允许我通过而不崩溃,它通过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);
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

导致:

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

如何将列表排序为上面所需的结果?

das*_*ght 6

请尝试使用此比较:

(c1.LastName ?? c1.EntityName).CompareTo(c2.LastName ?? c2.EntityName)
Run Code Online (Sandbox Code Playgroud)