Фильтровать список linq по значению свойства

У меня есть List<int> и a List<customObject>. Класс customObject имеет свойство ID. Как я могу получить List<customObject>, содержащий только те объекты, где свойство ID находится в List<int>, используя LINQ?

Изменить. Я принял ответ Konrads, потому что это проще/интуитивно понятно читать.

Ответы

Ответ 1

var result = from o in objList where intList.Contains(o.ID) select o

Ответ 2

У меня была аналогичная проблема только сейчас, и я использовал решение ниже. Если у вас уже есть список объектов, вы можете удалить все, не найденные в списке int, оставив только совпадения в objList.

objList.RemoveAll(x => !intList.Contains(x.id));

Ответ 3

using System.Linq;

objList.Where(x => intList.Contains(x.id));

Ответ 4

Отключено, но это будет примерно так:

var matches = from o in objList 
                  join i in intList on o.ID equals i
                  select o;

@Konrad просто протестировал его, и он работает - у меня просто была опечатка, где я написал "i.ID", а не "i".

Ответ 5

Просто для полноты (и, возможно, ее легче читать?), используя "where", похожее на "присоединяться" к Мэтту:

var matches = from o in customObjectList
              from i in intList
              where o.ID == i
              select o;

Ответ 6

Обратите внимание, что использование соединения вместо него НЕ РАБОТАЕТ, когда количество элементов в списке превышает 49! Вы получите сообщение об ошибке: Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.