[英]LINQ, double join with count and orderby
LINQ新手在查詢中掙扎,這在常規SQL中非常容易,但是由於某種原因,在嘗試使用lambda / query進行表達時,我感到非常痛苦。
我有三個對象:組織
public class Organization
{
public int OrganizationId { get; set; }
public ICollection<Employee> Employees { get; set; }
}
雇員
public class Employee
{
public int EmployeeId { get; set; }
public Organization Organization { get; set; }
public ICollection<Ticket> Tickets { get; set; }
}
票
public class Ticket
{
public int TicketId { get; set; }
public Employee Employee { get; set; }
}
使用LINQ,我需要按組織的票證數量來檢索組織的有序列表,作為IQueryable,它是可取的。
到目前為止,這是我想出的:
var q = Organizations.Join
(
Employees,
org => org.OrganizationId,
emp => emp.Organization.OrganizationId,
(org, emp) => new {org, emp}
)
.Join
(
Tickets,
t => t.emp.EmployeeId,
ticket => ticket.Employee.EmployeeId,
(t, ticket) => new {t, ticket}
)
.GroupBy(t => t.t.org.OrganizationId)
.Select
(
t => new { OrganizationId = t.Key, TCount = t.Count() }
)
.OrderByDescending(t => t.TCount).Dump()
所以我有組織的ID和數量。 我將如何檢索整個組織對象?
您不需要使用join,因為每個類都有集合。
Organizations.OrderByDescending(o => o.Employees.Sum(e => e.Tickets.Count()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.