列表上的排序<string> 属性

OrderBy on List<string> property

如何按以下方式为列表类型属性执行 OrderBy?

我想按名字和列表中的第一个字符串排序

未排序:ResearcherNames

  • 佐伊·拉斯,乔·史密斯
  • 凯尔伯特
  • 亚当·辛
  • 已订购:ResearcherNames

  • 亚当·辛
  • 凯尔伯特
  • 佐伊·拉斯,乔·史密斯
  • 这是我的 class 的样子

    public class assignments
    {
        public List<string> ReseacherNames { get; set; }
        public List<string> ClientUserNames { get; set; }
        ------Other Properties ------
    }
    
     //fill list
     combinedAssignments = new List<assignments>();
     foreach(var item in db) 
     {
        combinedAssingments.Add(item)
     }
    
     //need to sort by ResearcherNames
     combinedAssignments = combinedAssignments.OrderBy(x => x.ReseacherNames ).ToList();
    

    当我 运行 使用上述 OrderBy 调用时,我收到 "At least one object must implement IComparable." 错误。

    尝试

    所以我意识到我必须对 List 类型使用 IComparer 并实现了一个比较器,如下所示:

     public class RecordComparer : IComparer<List<string>>
     {
            public int Compare(string x, string y)
            {
                if (x == null)
                {
                    if (y == null)
                    {
                        // If x is null and y is null, they're 
                        // equal.  
                        return 0;
                    }
                    else
                    {
                        // If x is null and y is not null, y 
                        // is greater.  
                        return -1;
                    }
                }
                else
                {
                    // If x is not null... 
                    // 
                    if (y == null)
                    // ...and y is null, x is greater.
                    {
                        return 1;
                    }
                    else
                    {
                        // ...and y is not null, compare the  
                        // lengths of the two strings. 
                        // 
                        int retval = x.Length.CompareTo(y.Length);
    
                        if (retval != 0)
                        {
                            // If the strings are not of equal length, 
                            // the longer string is greater. 
                            // 
                            return retval;
                        }
                        else
                        {
                            // If the strings are of equal length, 
                            // sort them with ordinary string comparison. 
                            // 
                            return x.CompareTo(y);
                        }
                    }
                }
            }
    
            public int Compare(List<string> x, List<string> y)
            {
                var result = 0;
                if ((x != null && x.Count>0 )&& ( y != null && y.Count>0) )
                {
    
                    return Compare(x[0], y[0]);
                }
    
                return result;
            }
        }
    }
    

    用法:

    var rc = new RecordComparer();
     combinedAssignments = combinedAssignments.OrderBy(x=>     x.ResearcherNames,rc).ToList();
    

    没有错误消息,但结果未按字母排序。

    不需要 IComparer。这将按照第一个研究人员的名字的顺序为您提供作业:

    combinedAssignments = combinedAssignments
      .OrderBy(x => x.ReseacherNames.FirstOrDefault())
      .ToList();