我有一个类如下:
Object1{
int id;
DateTime time;
}
我有一个 Object1
列表。我想循环遍历另一个 Object1
列表,搜索具有相同 ID 的 Object1
,如果时间值晚于时间值,则在第一个列表中替换它列表。如果该项不在第一个列表中,则添加它。
我确定有一种优雅的方法可以做到这一点,也许是使用 linq? :
List<Object1> listOfNewestItems = new List<Object1>();
List<Object1> listToCycleThrough = MethodToReturnList();
foreach(Object1 object in listToCycleThrough){
if(listOfNewestItems.Contains(//object1 with same id as object))
{
//check date, replace if time property is > existing time property
} else {
listOfNewestItems.Add(object)
}
显然这是非常困惑的(而且甚至没有检查属性,这又变得更加困惑......),有没有更简洁的方法来做到这一点?
最佳答案
var finalList = list1.Concat(list2)
.GroupBy(x => x.id)
.Select(x => x.OrderByDescending(y=>y.time).First())
.ToList();
这里是完整的测试代码
public class Object1
{
public int id;
public DateTime time;
}
List<Object1> list1 = new List<Object1>()
{
new Object1(){id=1,time=new DateTime(1991,1,1)},
new Object1(){id=2,time=new DateTime(1992,1,1)}
};
List<Object1> list2 = new List<Object1>()
{
new Object1(){id=1,time=new DateTime(2001,1,1)},
new Object1(){id=3,time=new DateTime(1993,1,1)}
};
和输出:
1 01.01.2001
2 01.01.1992
3 01.01.1993
关于c# - 检查列表是否包含一个属性相同的对象的优雅方法,并且仅在另一个属性的日期较晚时才替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12638372/