我公司有0到n個部門,1個部門有0到n個辦公室,1個辦公室有0到n個辦公室。現在我需要一個使用linq來查詢僱員平均年齡的查詢部門,如果沒有人在一個部門則默認平均爲0。 代碼如下:使用LINQ到實體的外部聯接查詢
DataContext ctx = new DataContext();
var q0 = from d in ctx.Departments
join o in ctx.Offices on d.Id equals o.DepartmentId
join e in ctx.Employees on o.Id equals e.OfficeId
group e by d into de
select new {
DepartmentId = de.Key.Id,
AverageAge = de.Count() == 0 ? 0 : de.Average(e => e.Age),
};
var q1 = from d in ctx.Departments
join de in q0 on d.Id equals de.DepartmentId into des
from de in des.DefaultIfEmpty()
select new
{
DepartmentName = d.Name,
AverageAge = de == null ? 0 : de.AverageAge
};
var result = q1.ToList();
foreach (var item in result)
{
Console.WriteLine("{0}-{1}", item.DepartmentName, item.AverageAge);
}
ctx.Dispose();
但如何Q0和Q1結合起來,一個查詢?
下面是關於制定好文章與LINQ聯接:http://www.codeproject.com/Articles/488643/LinQ-Extended-Joins –
完美的擴展。但他們是方法,而不是流利的linq。 – user1729842