Фильтровать список linq по значению свойства - PullRequest
17 голосов
/ 01 сентября 2008

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

Редактировать : Я принял ответ Конрадса, потому что его легче / интуитивно читать.

Ответы [ 6 ]

16 голосов
/ 01 сентября 2008
var result = from o in objList where intList.Contains(o.ID) select o
12 голосов
/ 04 ноября 2013
using System.Linq;

objList.Where(x => intList.Contains(x.id));
10 голосов
/ 29 сентября 2009

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

objList.RemoveAll(x => !intList.Contains(x.id));
6 голосов
/ 01 сентября 2008

Не проверено, но это будет примерно так:

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

@ Конрад только что проверил это, и оно работает - у меня просто была опечатка, где я написал «i.ID», а не «i».

2 голосов
/ 01 октября 2008

Просто для полноты (а может, легче читать?), Используя «где», аналогично «объединению» Мэтта:

var matches = from o in customObjectList
              from i in intList
              where o.ID == i
              select o;
0 голосов
/ 06 августа 2011

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

...