c# - 比较对象和返回列表

标签 c# c#-4.0

我有一个如下所示的类定义:

public class MyObjectModel
{
   public int ObjectID { get; set; }

   //for when the user's data is split in 2 fields
   public string FirstName { get; set; }
   public string LastName { get; set; }

   //for when the user's data is all in one field
   public string FirstLastName { get; set; }
}

我有这些 MyObjectModel 的列表,我想使用自定义排序过程按名称对它们进行排序,因为这涉及检查数据是否包含 LastName(在此case sort using the LastName) 或者只是FirstLastName(在这种情况下,我将打破字符串并在第二项上排序,如果有的话,或者只是整个如果只有一个单词,则为字符串。)

我不确定两件事:

  1. 我应该使用 IComparer 还是 IComparable
  2. 一旦它确定了排序顺序(我可以做到),我该怎么做才能使该方法的输出是一个表示 ObjectID 的整数列表。

最佳答案

使用 Linq:

  List<MyObjectModel> objects = new List<MyObjectModel>();
  List<int> ids = objects.OrderBy(o => FunctionWhichReturnsNameForSort(o)).Select(o => o.ObjectID).ToList();

FunctionWhichReturnsNameForSort 可以在另一个类、扩展或作为成员中实现。

// should be in a static helper class
public static string NameForSort(this MyObjectModel obj)
{
  if (!string.IsNullOrEmpty(obj.LastName)) return obj.LastName;

  return obj.FirstLastName.Split(... // your splitting logic goes here
}

var ids = objects.OrderBy(o => o.NameForSort()).Select(o => o.ObjectID).ToList();

关于c# - 比较对象和返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712445/

相关文章:

c# - Linq 语句 : Order by

c# - 你如何关闭 VS 2013 中的 Razor 突出显示?

c# - 使用 SQLite 数据库 : unable to create object of type 进行 EF Core 迁移

C# 无法将 cookiecontainer 分配给 asmx web 服务客户端

c# - 从数据集中获取 byte[] 并压缩

winforms - 动态地将列和行添加到 tablelayoutpanel 行中

c# - Linux Mono + Postsharp + Log4Net = 没有自动异常捕获

c# - 使用 Linq [C#] 加载重复命名的 XML 节点

JavaScript/Html Pl/sql 验证器。

c# - 按单词对 C# 列表进行排序