如何用对象列表过滤对象列表? [复制]

Posted

技术标签:

【中文标题】如何用对象列表过滤对象列表? [复制]【英文标题】:How to filter the list of object with list of object? [duplicate] 【发布时间】:2021-09-14 09:04:31 【问题描述】:

我想尝试使用无法正确实现的对象列表来过滤对象列表。有没有一个扩展可以用来过滤带有对象的对象?

我的尝试,

using System.Collections.Generic;
using System.Linq;

namespace MyTests

    internal class Program
    
        private static void Main(string[] args)
        
            var employees = new List<Employee>();

            employees.AddRange(new List<Employee>
            
                new Employee
                
                    Id = 1,
                    Name = "John Doe"
                ,
                new Employee
                
                    Id = 2,
                    Name = "Smith Doe"
                ,
                new Employee
                
                    Id = 3,
                    Name = "Jane Doe"
                
            );

            var result = employees.Where(employee => employee.Name != new string["John Doe", "Smith Doe"]);
        
    

    public class Employee
    
        public int Id  get; set; 
        public string Name  get; set; 
    

预期结果:

简·多伊

【问题讨论】:

!array.Any(employee.Name) ? 将employess数组放在其他地方进行过滤,并在where子句中使用数组的Contains方法。 employees.Where(employee =&gt; filteredEmployeesArray.Contains(employee)); @Ralf a HashSet 在这里效率更高。 result = emplyee3; 效率最高 ^^ 感谢您的反馈。我会试试你的建议。 【参考方案1】:
    var badNames = new HashSet<string> "John Doe", "Smith Doe";
    var employees = new List<Employee>
                    new Employee Id = 1, Name = "John Doe",
                    new Employee Id = 2, Name = "Smith Doe",
                    new Employee Id = 3, Name = "Jane Doe";
    var goodEmployees = employees.Where(e => !badNames.Contains(e.Name));

    goodEmployees.ToList().ForEach(e => Console.WriteLine("Good one: 0", e.Name));

【讨论】:

感谢您的反馈。我会试试你的建议。【参考方案2】:

当使用 Linq 查询进行过滤时,您应该传递一个有效的比较。 例如:

var result = employees.Where(employee => employee.Name == "Jane Doe");

var result = employees.Where(employee => !(new [] "John Doe", "Smith Doe").Contains(employee.Name));

这将返回一个过滤的 Employee 对象列表,条件匹配。

【讨论】:

优化留给读者作为练习。 感谢您的反馈。我会试试你的建议。

以上是关于如何用对象列表过滤对象列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

VueJS:显示过滤后的数组列表

使用 PyQT,如何为带有自定义列表的 QComboBox 过滤 mousePressEvent

django - 通过过滤对象列表获取对象列表

使用 linq 过滤繁琐的对象列表

过滤数组列表或列表中的自定义对象[重复]

Django按模型对象列表过滤