【发布时间】:2012-08-04 18:37:10
【问题描述】:
我有一个list<message>,其中包含Guid 和DateTime 类型的属性(以及其他属性)。我想删除该列表中Guid 和DateTime 相同的所有项目(除了一个)。有时这两个属性会与列表中的其他项目相同,但其他属性会有所不同,所以我不能只使用.Distinct()
List<Message> messages = GetList();
//The list now contains many objects, it is ordered by the DateTime property
messages = from p in messages.Distinct( what goes here? );
这是我现在所拥有的,但似乎应该有更好的方法
List<Message> messages = GetList();
for(int i = 0; i < messages.Count() - 1) //use Messages.Count() -1 because the last one has nothing after it to compare to
{
if(messages[i].id == messages[i+1}.id && messages[i].date == message[i+1].date)
{
messages.RemoveAt(i+1);
{
else
{
i++
}
}
【问题讨论】:
-
谢谢。我不知道为什么我搜索时找不到。
-
我很高兴乔恩的回答对你有用。请注意:您的“当前使用的方法”无法编译,并且(在修复编译错误之后)它不会在所有情况下都有效 - 根据元素的顺序,您会得到不同的 (错误) 结果(毕竟,您只是在比较相邻的元素)。
-
感谢您的提醒。 GetList() 返回一个有序列表。我测试了不同的案例,得到了我需要的结果。
标签: c# list distinct linq-to-objects