[英]Get top result in each parent property in Entity Framework
我試圖選擇每個部門中報告最多的員工。 我無法弄清楚如何使用Entity Framework中的LINQ做到這一點。 我使用的是EF Core,但答案應與EF 6相同,因此任一答案都可以。 我知道我需要使用.Distinct()
,但是我不確定如何正確使用它。
如何獲得每個部門中報告最多的員工? 該查詢應返回員工列表(或可查詢)。
public class Employee
{
public long Id { get; set; }
public string Name { get; set; }
public long DepartmentId { get; set; }
public Department Department { get; set; }
public ICollection<Report> Reports { get; set; }
}
public class Department
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Employee> Employees { get; set; }
}
這就是我的開始,但是我不確定這是否是正確的開始方式。
var employees = _context.Employees
.OrderByDescending(e => e.Reports.Count)
// ?
只需從每個部門中獲取報告最多的員工即可:
var employees = _context.Departments.Select(department =>
department.Employees.OrderByDescending(employee => employee.Reports.Count).FirstOrDefault()).ToList();
您應該在部門級別開始查詢。 在每個部門內,讓其員工擁有最高的報告數量:
var topEmpPerDep = _context.Departments
.Select(dep => new
{
Department = dep.Name,
Employee = dep.Employees.OrderByDescending(e => e.Reports.Count)
.FirstOrDefault().Name
});
嘗試這個 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var results = Department.departments.Select(x => new {
deptmentName = x.Name,
maxEmployeeReports = x.Employees.Select(y => new { name = y.Name, count = y.Reports.Count, employee = y }).OrderByDescending(z => z.count).FirstOrDefault()
}).ToList();
}
}
public class Employee
{
public long Id { get; set; }
public string Name { get; set; }
public long DepartmentId { get; set; }
public Department Department { get; set; }
public ICollection<Report> Reports { get; set; }
}
public class Department
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Employee> Employees { get; set; }
public static List<Department> departments = new List<Department>();
}
public class Report
{
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.