Sparked
Sparked

Reputation: 874

IEnumerable - exclude using an array

Does anyone know if it's possible to create a new IEnumerable by using an array parameter to exclude values.

For instance, below is an example of how I imagine it would look.

   class Item
   {
       public int id { get; set; }
       public string name { get; set; }
   }

IEnumerable looks like this:

item1 {id = 1}
item2 {id = 2}
item3 {id = 3}

I want to create a new IEnumerable but exclude the id numbers in the array.

Made up code to suggest idea:

Int32[] arrayList = {1,2};
var newIEnumerable = _exisitingIEnumerable.Where(o => (o.id NOT IN arrayList));

Upvotes: 1

Views: 1502

Answers (2)

Patrick McDonald
Patrick McDonald

Reputation: 65421

Looking at your question again, when the element type of _exisitingIEnumerable is not the same as that of arrayList, you will need to use Where to filter out the elements of arrayList

_exisitingIEnumerable.Where(o => !arrayList.Contains(o.Id))

Original answer:

_exisitingIEnumerable.Except(arrayList)

will return the distinct elements from _exisitingIEnumerable that are not in arrayList

If you need duplicates, you can use

_exisitingIEnumerable.Where(o => !arrayList.Contains(o))

Upvotes: 4

PiotrWolkowski
PiotrWolkowski

Reputation: 8782

What's wrong with the approach you suggested in the question? You can use Where and check if the array contains the value. Below the example using List as a target collection:

var myList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] myArray = { 1, 2, 3 };

var result = new List<int>(myList.Where(n => !myArray.Contains(n)));

Upvotes: 1

Related Questions