【问题标题】: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; 效率最高 ^^
  • 感谢您的反馈。我会试试你的建议。

标签: c#


【解决方案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 对象列表,条件匹配。

【讨论】:

  • 优化留给读者作为练习。
  • 感谢您的反馈。我会试试你的建议。
猜你喜欢
  • 2017-06-14
  • 1970-01-01
  • 2022-01-12
  • 2015-03-24
  • 1970-01-01
  • 2014-08-14
  • 2011-01-10
  • 2013-04-10
相关资源
最近更新 更多