"列表上的排序方式"<string>属性



如何以以下方式为List类型属性执行OrderBy ?

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

UnOrdered: ResearcherNames

  • Zoe Las, Joe Smith
  • 凯尔·伯特
  • 亚当活力
  • 命令:ResearcherNames亚当活力

  • 凯尔·伯特
  • Zoe Las, Joe Smith
  • 这是我的类的样子

    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调用时,我得到"至少一个对象必须实现IComparable."错误。

    所以我意识到我必须使用列表类型的比较器,并实现了比较器如下:

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

    没有错误提示,但是结果不是alpha排序。

    不需要比较器。这将按照第一个研究人员的名字给你分配任务:

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

    相关内容

    • 没有找到相关文章

    最新更新