gpt4 book ai didi

c# - 排列是否存在

转载 作者:行者123 更新时间:2023-11-30 17:06:56 24 4
gpt4 key购买 nike

我正试图找出 linq to sql 中的正确查询,但我就是不知道该怎么做。假设我有一个包含以下内容的表格(该表格基本上是一对多关系)

Id (PK) | SupervisorId | EmployeeId
1 1 5
2 1 6
3 1 7
4 2 5
5 2 6
6 3 7
7 4 7
8 4 8

我希望我的 linq to sql 查询找到 employeeId 为 5 和 6 的 supervisorId。该查询将仅返回 2。我可以使用 2 个 where 子句,但假设我想输入 3 个 employeeId,我的查询将不得不修改。如果传递的排列不存在一个匹配的 SupervisorId(例如:本例中的 5、6、8),则结果将为 null 或空。

函数看起来像这样:

int FindSuperVisorId(List<int> employeeIds);

对于这种情况,我真的不知道从哪里开始使用 linq to sql。

谢谢

最佳答案

所以我很确定这个查询应该被转换为 LINQ to SQL 的属性,但我不完全确定。

所以首先我们按主管分组,这样我们就有了该主管的员工序列。然后,我们对您在两个方向上都感兴趣的员工使用 Except。如果这两个 Except 调用的计数为零,则这些集合完全相等。在 linq-to-objects 中有更有效的方法来确定两个集合是否相等,但我怀疑它们能否正确转换为 SQL 代码。

var supervisorId = table.GroupBy(item => item.SupervisorId)
.Select(group => new
{
additionalItems = group.Select(item => item.EmployeeId).Except(employees),
missingItems = employees.Except(group.Select(item => item.EmployeeId)),
group = group
})
.Where(queries => queries.additionalItems.Count() == 0
&& queries.missingItems.Count() == 0)
.Select(queries => queries.group.Key)//gets the supervisorID
.FirstOrDefault();

关于c# - 排列是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939207/

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