Ответ 1
var result = from o in objList where intList.Contains(o.ID) select o
У меня есть List<int>
и a List<customObject>
. Класс customObject имеет свойство ID. Как я могу получить List<customObject>
, содержащий только те объекты, где свойство ID находится в List<int>
, используя LINQ?
Изменить. Я принял ответ Konrads, потому что это проще/интуитивно понятно читать.
var result = from o in objList where intList.Contains(o.ID) select o
У меня была аналогичная проблема только сейчас, и я использовал решение ниже. Если у вас уже есть список объектов, вы можете удалить все, не найденные в списке int, оставив только совпадения в objList.
objList.RemoveAll(x => !intList.Contains(x.id));
using System.Linq;
objList.Where(x => intList.Contains(x.id));
Отключено, но это будет примерно так:
var matches = from o in objList
join i in intList on o.ID equals i
select o;
@Konrad просто протестировал его, и он работает - у меня просто была опечатка, где я написал "i.ID", а не "i".
Просто для полноты (и, возможно, ее легче читать?), используя "where", похожее на "присоединяться" к Мэтту:
var matches = from o in customObjectList
from i in intList
where o.ID == i
select o;
Обратите внимание, что использование соединения вместо него НЕ РАБОТАЕТ, когда количество элементов в списке превышает 49! Вы получите сообщение об ошибке: Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.