如何用对象列表过滤对象列表? [复制]
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 => 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 对象列表,条件匹配。
【讨论】:
优化留给读者作为练习。 感谢您的反馈。我会试试你的建议。以上是关于如何用对象列表过滤对象列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章