基于另一个列表- LINQ过滤列表

本文关键字:列表 LINQ 过滤 另一个 | 更新日期: 2023-09-27 18:10:08

我有两个IEnumerable列表。

我想根据第一个列表的结果将值填充到第二个列表中。

第一个IEnumerable列表像这样填充:

IEnumerable<SelectListItem> selectedList =
CategoryServices.GetAttributesByCategoryID(categoryID); // it returns selected attributes for a particular category

我有一个函数来获取所有属性。现在我想得到另一个列表,其中包含所有其他属性(即,项目不存在于selectedList)。我试过了:

IEnumerable<SelectListItem> available =
CategoryServices.GetAllAttributes().Where(a => !selectedList.Contains(a));

但这不是过滤。我正在获取所有属性…什么好主意吗?

基于另一个列表- LINQ过滤列表

确保您的SelectListItem类实现IEquatable<SelectListItem>,以便Contains()方法有适当的方法来确定实例的相等性。

我想这会对你有帮助。

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB);
Console.WriteLine("Numbers in first array but not second array:");
foreach (var n in aOnlyNumbers)
{
    Console.WriteLine(n);
}
结果

第一个数组中的数字但不包含第二个数组:02469

GetAllAttributes()可能会给您带来新一轮的对象,它们与GetAttributesByCategoryID(...)返回的对象不同。你需要比较一些比对象引用更好的东西。

你可以实现System.IEquatable<T>来改变默认的比较器