列表上的排序<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();
如何按以下方式为列表类型属性执行 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();