2015-09-03 3 views
4

У меня есть два объекта списка. Я объединяю их в один список. При объединении мне нужно удалить дубликаты. TweetID - это поле для сравнения.Объедините два списка <> и удалите дубликаты в нем

List<TweetEntity> tweetEntity1 = tt.GetTweetEntity(Convert.ToInt16(pno), qdecoded, longwoeid); 
List<TweetEntity> tweetEntity2 = tt.GetTweetEntity(Convert.ToInt16(pno), qdecoded); 
List<TweetEntity> tweetEntity = tweetEntity1.Concat(tweetEntity2).ToList(); 

Я объединил два списка, но не смог отфильтровать дубликаты. Есть ли встроенная функция для удаления дубликатов в списке <>?

+6

Вы пытались найти ответ? http://stackoverflow.com/questions/4031262/how-to-merge-2-listt-with-removing-duplicate-values-in-c-sharp http://stackoverflow.com/questions/3682437/combining-2 -lists-and-and-remove-duplicates-output-in-a-third-list-my-попытки – SpaceSteak

+1

Это не дубликат, так как здесь элемент списка сам является сложным объектом. Ответы в ссылке - это простой список целых объектов. – Venkat

+0

Такая же идея, за исключением того, что вам нужно искать свойства вместо значения. Вы можете экстраполировать сложность вопроса. – SpaceSteak

ответ

3

Вы можете использовать метод Distinct().

tweetEntity1.Concat(tweetEntity2).Distinct().ToList(); 
+1

Использование 'Union' - лучший подход, потому что этот метод уже отфильтровывает дубликаты. –

3

использовать расширение в Union Linq,

tweetEntity1.Union(tweenEntity2).ToList() 

функционально эквивалентны .Concat и Distinct в сочетании, но проще набрать и быстрее бегать,

6

Вы можете использовать Union метода.

List<TweetEntity> tweetEntity = tweetEntity1.Union(tweetEntity2).ToList(); 

Однако, вы должны сначала переопределить Equals и GetHashCode для TweetEntity.

+0

Или передайте 'IEqualityComparer', так как равенство уже было реализовано. – Caramiriel

2

Вы можете использовать метод linq Distinct, однако вам нужно будет реализовать IEqualityComparer<T>.

public class TweetEntityComparer<TweetEntity> 
{ 
    public bool Equals(TweetEntity x, TweetEntity y) 
    { 
     //Determine if they're equal 
    } 

    public int GetHashCode(TweetEntity obj) 
    { 
     //Implementation 
    } 
} 

List<TweetEntity> tweetEntity = tweetEntity1.Concat(tweetEntity2).Distinct().ToList(); 

В качестве альтернативы вы также можете использовать Union.

List<TweetEntity> tweetEntity = tweetEntity1.Union(tweetEntity2).ToList(); 
+0

Союз не работает. Поскольку мой объект списка является классом. – Venkat

+0

Я не знаю, как реализовать этот IEqualityComparer . Не могли бы вы рассказать. – Venkat

Смежные вопросы