2015-07-18 4 views
1

Я знаю, что на этом сайте много связанных тем, но я просто не могу найти что-то, что работает для меня. Извините, если это выглядит слишком похоже на дубликат. Во всяком случае, моя проблема в том, что я пытаюсь преобразовать следующий SQL-запрос в LINQ, но ничто из того, что я пробовал до сих пор, похоже, не сработало. Этот запрос:SQL-запрос с группировкой и присоединением к LINQ

select top(10) a.AddressText, t.Name, count(e.FirstName) as [EmployeesCount] 
from Addresses a 
join Employees e 
on a.AddressID = e.AddressID 
join Towns t 
on a.TownID = t.TownID 
group by a.AddressText, t.Name 
order by [EmployeesCount] desc, t.Name asc 

То, что я получил до сих пор:

SoftUniEntities context = new SoftUniEntities(); 

var addresses = from a in context.Addresses.Take(10) join e in context.Employees on a.AddressID equals e.AddressID 
join t in context.Towns on a.TownID equals t.TownID into addressesWithTownsAndEmployees 
orderby addressesWithTownsAndEmployees.Count() descending, a.Town.Name ascending 
select new { Address = a.AddressText, TownName = a.Town.Name, EmployeesCount = addressesWithTownsAndEmployees.Count() }; 

Проблема с графом. Результат для него неверен, и это совершенно нормально, потому что я знаю, что я испортил выбор подсчета.

+0

Пожалуйста, покажите нам, что вы пытались до сих пор, и где возникли проблемы. – d4Rk

+0

Я отредактировал мое сообщение с моим текущим запросом linq –

ответ

0

Подумав о том, как сделать это в LINQ, не связывая это слишком много с SQL я придумал это гораздо менее сложным LINQ запрос:

var addresses = (from a in context.Addresses 
orderby a.Employees.Count descending, a.Town.Name ascending 
select new { Address = a.AddressText, TownName = a.Town.Name, 
EmployeesCount = a.Employees.Count }).Take(10).ToList(); 
Смежные вопросы