Сравните два разных списка, чтобы заполнить третий список

1

У меня есть два списка разных типов, которые имеют общий ориентир, который мне нужно сравнить.

если значение существует в обоих списках, мне нужно заполнить свойство isPresent в третьем списке.

 class a {
 Guid stub;
 string name;
 int number;
 }

 class b {
 Guid SecondStub;
 .
 .

 }
 class temp 
 {
  bool isPresent;
  string somethingElse;
 }

 ------------------------------------------

теперь у меня есть один Список каждого типа a и b, и мне нужно заполнить свойство isPresent в третьем списке.

 foreach (var a in ListofA)
 {
 temp.Add(new Temp(){ 
 isPresent = ListOfB.Where(l => l.SecondStub == a.Stub).Equals(null)
 })};

не работает.. пожалуйста помогите.

  • 0
    Нет ... у него больше свойств.
Теги:
linq

2 ответа

1
Лучший ответ

В синтаксисе linq он должен выглядеть так:

var temps = from a in ListofA
           join b in ListofB on a.SecondStub == b.Stub
           select new temp { isPresent = True, 
                             OtherProperty = "something", 
                             ThirdProperty = "something else"};

Хотя вы не оставили места в temp, чтобы сказать, какой из них был прав, только флаг isPresent.

Возможно, вы хотите включить значение в свойство в temp?

  • 0
    это не работает в случае, когда temp имеет более одного свойства.
  • 0
    @ShankyJain, смотрите мои правки о том, как добавить информацию в другие свойства.
0

Причина, по которой не работает, заключается в том, что Where всегда возвращает объект, поскольку он возвращает перечислимый и, возможно, без элементов в нем, но он по-прежнему не является нулевым.

Используйте Any вместо Where.

 var c = a
    .Select(x => new Temp {
        IsPresent = b.Any(z => z.SecondStub == x.Stub)
    })
    .ToList();

(с моего телефона, поэтому форматирование может быть отключено)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню