Как я могу получить данные из списка с предложением where в другой список? - PullRequest
2 голосов
/ 28 января 2009

У меня есть список с несколькими классами, которые содержат свойство, которое является целым числом (Id).

У меня тоже есть список целых чисел.

Теперь я хотел бы урезать List моего объекта только тем классом, у которого Property есть в списке целых чисел.

Пример:

List of MyObject
[MyObjectA].Id = 1
[MyObjectB].Id = 2
[MyObjectC].Id = 3
[MyObjectD].Id = 4

List of Integer
1
2

Final list should be 
[MyObjectA]
[MyObjectB]

Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 28 января 2009

Вы можете использовать содержит:

var finalList = originalList.Where(x => idList.Contains(x.Id)).ToList();

Или объединение:

var finalList = (from entry in originalList
                join id in idList on entry.Id equals id
                select entry).ToList();
0 голосов
/ 16 мая 2012

Или, если у вас есть два списка со свойствами, попробуйте это:

List<someObj1> firstList ... //assume this has items
List<otherObj2> secondList ... //assume this has items
var finalList = firstList.Where(so1 => secondList.Select(oo2 => oo2.Prop1).Contains(so1.Prop1) && so1.Prop2 == "foo");

//Prop1 is a property of the someObj1 and otherObj objects. 
//Prop2 is a property of the someObj1 object.
0 голосов
/ 28 января 2009

Это должно сделать это:

// Assume objList is IEnumerable<MyObject> and intList is IEnumerable<int>.
IEnumerable<MyObject> intersection =
  from obj in objList
    join i in intList on obj.Id equals i
  select obj

Имейте в виду, если несколько объектов имеют одинаковый идентификатор или идентификатор указан в списке несколько раз, и один объект соответствует ему, объект будет отображаться более одного раза в результирующем списке.

Я думаю, что группа лучше для больших списков, так как некоторые другие решения будут многократно повторять списки для поиска соответствующего объекта.

0 голосов
/ 28 января 2009

Как насчет:

list.RemoveAll(x => list2.IndexOf(x.Id) >= 0);
...