2016-08-30 4 views
0

Я следующие два списка:найти общие элементы между двумя списка с помощью лямбда-выражения

var firstList = new List<ProgramInfo>() 
{ 
    new ProgramInfo {Name = "A", ProgramId = 1, Description = "some text1"}, 
    new ProgramInfo {Name = "C", ProgramId = 2, Description = "some text2"}, 
    new ProgramInfo {Name = "D", ProgramId = 3, Description = "some text3"}, 
    new ProgramInfo {Name = "E", ProgramId = 4, Description = "some text4"} 
}; 

var secondList = new List<ProgramInfo>() 
{ 
    new ProgramInfo {Name = "C", ProgramId = 2, Description = "some text1"}, 
    new ProgramInfo {Name = "D", ProgramId = 3, Description = "some text2"}, 
}; 

это два списка получает генерируется во время выполнения и я должен выбрать общий ProgramInfo в зависимости от программы ид из обоих этого списка

, например, в случае выше примера вывод должен быть

var thirdList = new List<ProgramInfo>() 
{ 
    new ProgramInfo {Name = "C", ProgramId = 2, Description = "some text1"}, 
    new ProgramInfo {Name = "D", ProgramId = 3, Description = "some text2"}, 
}; 

    public class ProgramInfo 
    { 
    public string Name { get; set; } 
    public int ProgramId { get; set; } 
    public string Description { get; set; } 
    } 

может кто-то предложить мне, как я могу сделать это с помощью лямбда-выражения?

+0

Это может быть опечатка, но не уверен - я ' secondList' и 'thirdList', вы имели в виду' 'some text2" и '" some text3 "' как в списках выше? –

+1

Не уверен, что я вижу много исследований здесь ... –

ответ

1

Использование Linq .Intersect. Для того, чтобы работать ваш класс должен переопределить Equals и GetHashCode

var thirdList = firstList.Intersect(secondList); 

Вы также можете указать IEqualityComparer вместо переопределения функции:

public class Comparer : IEqualityComparer<ProgramInfo> 
{ 
    public bool Equals(ProgramInfo x, ProgramInfo y) 
    { 
     return x.Name == y.Name && 
      x.ProgramId == y.ProgramId && 
      x.Description == y.Description; 
    } 

    public int GetHashCode(ProgramInfo obj) 
    { 
     return obj.Name.GetHashCode()^
      obj.ProgramId.GetHashCode()^
      obj.Description.GetHashCode(); 
    } 
} 

var thirdList = firstList.Intersect(secondList, new Comparer()); 
+0

большое спасибо. Я думал об IEqualityComparer. – App

+0

@App - Прохладный :), если вы нашли это полезным, пожалуйста, рассмотрите разметку как решение и выживание :) –

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