Выберите элементы из списка A, свойства которых нет в списке B

#c# #linq

#c# #linq

Вопрос:

У меня есть a List<Broadcast> , и у Broadcast объекта есть свойство , которое называется Guid . Теперь мне нужно найти все Broadcast объекты в этом списке , Guid свойство которых не является элементом List<Guid> . Я нашел решение, Except(); но оно не работает для меня.

 Broadcasts.Where(x => x.Guid).Except(readBroadcasts);
 

Что я делаю не так?

Ответ №1:

Вот способ, которым вы можете это сделать :

 List<Guid> excludeGuid = ..... // You init guids you want to exclude
List<Broadcast> result = Broadcasts.Where(x => !excludeGuid.Contains(x.Guid)).ToList() ; 
 

Ответ №2:

Попробуйте это :

 Broadcasts.Where(x => !List.Contains(x.Guid))....
 

Ответ №3:

Вы также можете использовать List.FindAll :

 List<Broadcast> notInGuidList = Broadcasts.FindAll(b => !readBroadcasts.Contains(b.Guid));
 

Другим более подробным, но, возможно, более эффективным способом является «Левое внешнее соединение» с LINQ:

 var notFound = from bc in Broadcasts
               join guid in readBroadcasts
               on bc.Guid equals guid into gj
               from guidJoin in gj.DefaultIfEmpty()
               where guidJoin == default(Guid)
               select bc;
List<Broadcast> notFoundBroadCasts = notFound.ToList();