Zoe Las, Joe Smith
凯尔·伯特 亚当活力凯尔·伯特 Zoe Las, Joe Smith
如何以以下方式为List类型属性执行OrderBy ?
我想按名字和列表中的第一个字符串排序
UnOrdered: ResearcherNames
命令:ResearcherNames亚当活力
这是我的类的样子
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();