gpt4 book ai didi

c# - 复杂的orderby问题( Entity Framework )

转载 作者:太空狗 更新时间:2023-10-30 00:46:33 25 4
gpt4 key购买 nike

好的,所以我首先要说我对所有这些东西都是新手,并尽我最大的努力从事这个项目。我有一个员工对象,其中包含一个主管字段。当有人在我的页面上输入搜索时,数据网格会显示姓名与搜索匹配的员工。但是,我需要它来显示向他们报告的所有员工以及向原始员工的下属报告的第三层员工。我只需要三层。为了使这更容易,员工只有 3 个级别,所以如果 rank==3,则该员工不负责其他人。我想从我的员工表中检索所有这些员工的最佳方法是类似

from employee in context.employees
where employee.name == search || employee.boss.name == search ||
employee.boss.boss.name == search

但我不确定如何让 orderby 以我想要的方式出现。我需要它分层显示。所以,它看起来像:大老板-老板-下属-下属-老板-下属-老板-老板-大老板-

就像我说的,可能有更简单的方法来解决整个问题,如果有的话,我会洗耳恭听。如果您能提供任何建议,我们将不胜感激。

最佳答案

使用任何特定的 ORM 框架,这似乎是一项很难解决的要求,至少不是一个简单的步骤。可能需要一个多步骤过程。

可以通过遍历搜索结果并找到他们的 child (和 child 的 child )并将层次结构展平为单个列表的方法来完成大致相似的事情。这里有一个示例实现,这个是使用普通的内存列表完成的:

class Employee
{
public int Id { get; private set; }
public int? BossId { get; private set; }
public string Name { get; private set; }

public Employee(int id, int? bossId, string name)
{
Id = id;
BossId = bossId;
Name = name;
}
}

示例数据:

List<Employee> employees = new List<Employee>();
employees.Add(new Employee(1, null, "Tom Smith"));
employees.Add(new Employee(2, null, "Susan Jones"));
employees.Add(new Employee(3, 1, "Sally Davis"));
employees.Add(new Employee(4, 1, "Robert Roberts"));
employees.Add(new Employee(5, 3, "John Smith"));
employees.Add(new Employee(6, 2, "Tonya Little"));
employees.Add(new Employee(7, 3, "Ty Bell"));
employees.Add(new Employee(8, 4, "Helen Andrews"));
employees.Add(new Employee(9, 2, "Matt Huang"));
employees.Add(new Employee(10, 6, "Lisa Wilson"));

过程:

string searchTerm = "Smith";

var searchResults = employees.Where(e => e.Name.Contains(searchTerm));

List<Employee> outputList = new List<Employee>();

Action<IEnumerable<Employee>, List<Employee>> findUnderlings = null;
findUnderlings = (input, list) =>
{
foreach (Employee employee in input)
{
list.Add(employee);
var underlings = employees.Where(e => e.BossId == employee.Id);
findUnderlings(underlings, list);
}
};

findUnderlings(searchResults, outputList);

显示输出:

foreach (Employee employee in outputList)
{
Console.WriteLine("{0}\t{1}\t{2}", employee.Id, employee.Name, employee.BossId);
}

结果:

1       Tom Smith
3 Sally Davis 1
5 John Smith 3
7 Ty Bell 3
4 Robert Roberts 1
8 Helen Andrews 4
5 John Smith 3

您可以看到它跟随最高结果、下属、下属的下属、下一个结果、任何下属等。它适用于任意数量的层级。

我不确定如何在 Linq 或什至常规 SQL 中的“order by”中实现这一点,但这只能意味着我不够聪明,无法做到这一点而不是这是不可能的。

关于c# - 复杂的orderby问题( Entity Framework ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011643/

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