IEnumerable - 使用数组排除

时间:2015-03-30 10:55:48

标签: c# .net

有没有人知道是否可以通过使用数组参数来排除值来创建新的IEnumerable。

例如,下面是我想象的样子的一个例子。

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

IEnumerable看起来像这样:

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

我想创建一个新的IEnumerable但排除数组中的id号。

编写代码以提出建议:

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

2 个答案:

答案 0 :(得分:2)

再次查看您的问题,当_exisitingIEnumerable的元素类型与arrayList的元素类型不同时,您需要使用Where来过滤掉{{1}的元素1}}

arrayList

原始回答:

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

将返回_exisitingIEnumerable.Except(arrayList) 中不在_exisitingIEnumerable

中的不同元素

如果您需要重复项,可以使用

arrayList

答案 1 :(得分:1)

您在问题中提出的方法有什么问题?您可以使用Where并检查数组是否包含该值。在使用List作为目标集合的示例下面:

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)));