基于另一个列表- 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));
但这不是过滤。我正在获取所有属性…什么好主意吗?
确保您的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>
来改变默认的比较器