繁体   English   中英

按C#中的共享属性对不同对象的列表进行排序

[英]Sorting a list of different objects by shared property in C#

我有类Message

 public DateTime DateCreated {get; set;}
 public int MessageId {get; set;}

我也有课Activity

public DateTime DateCreated {get; set;}
public int ActivityId {get; set;}

在我的数据库中,我使用EF查询这两个项目:

db.Messages.ToList();
db.Activities.ToList(); 

我需要获取这两个列表,将它们推入单个列表,然后按DateCreated排序。 我可以使用继承来使Activity和Message从一些通用的“Dated”类继承,但它感觉很乱,特别是因为这些类已经从其他类继承。

实现这个目标的正确方法是什么?

在这种情况下你可以使用接口:

public interface IDateCreated 
{
  DateTime DateCreated { get; set; }
}

在您的类中实现此接口,然后您将创建

var list = new List<IDateCreated>();
list.AddRange(db.Messages.ToList());
list.AddRange(db.Activities.ToList());
var result = list.OrderBy(x => x.DateCreated);

带接口

public interface IDatedObject
{
   DateTime DateCreated {get;}
}

现在让两个类实现接口并存储在接口列表中。

合并到一个列表中时,所有元素应该具有相同的类型,而您没有中间类型,只需尝试匿名类型:

var list = db.Messages.ToList().Select(x=>new{x.DateCreated, Id = x.MessageId})
             .Concat(db.Activities.ToList().Select(x=>new{x.DateCreated,Id = ActvitiyId})
             .OrderBy(x=>x.DateCreated).ToList();

您可以使用System.Collections.SortedList其add方法包括键和值参数: MSDN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM