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