gpt4 book ai didi

linq - Linq连接中是否有 “not equal”

转载 作者:行者123 更新时间:2023-12-03 09:17:24 25 4
gpt4 key购买 nike

我正在尝试完成下面的LINQ查询,但是我需要一个“不等于”而不是相等,以便filteredEmployees的所有雇员都来自groupA减去groupB。

List<Employee> groupA = getEmployeeA();
List<Employee> groupB = getEmployeeB();

var filteredEmployees = from a in groupA
join b in groupB on a.Name equals b.Name
select a;

最佳答案

您不需要为此加入:

var filteredEmployees = groupA.Except(groupB);

请注意,这将是一系列唯一的雇员-因此,如果 groupA中有任何重复项,则它们只会在 filteredEmployees中出现一次。当然,它也假设您有一个合理的相等比较器1。如果您需要专门使用名称,则可以使用 ExceptBy 中的 MoreLINQ:
var filteredEmployees = groupA.ExceptBy(groupB, employee => employee.Name);

或不进入第三方库:
var groupBNames = new HashSet<string>(groupB.Select(x => x.Name));
var filteredEmployees = groupA.Where(x => !groupBNames.Contains(x.Name));

1如注释中所指出的,您可以将 IEqualityComparer<T>传递为 Except的参数。我在 MiscUtil中有一个 ProjectionEqualityComparer类,可以轻松构建所需的比较器:
// I can't remember the exact method name, but it's like this :)
var comparer = ProjectionEqualityComparer<Employee>.Create(x => x.Name);
var filteredEmployees = groupA.Except(groupB, comparer);

关于linq - Linq连接中是否有 “not equal”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com