【问题标题】:SQL query with grouping and join into LINQ带有分组和加入 LINQ 的 SQL 查询
【发布时间】:2015-07-18 09:22:01
【问题描述】:

我知道这个网站上有很多相关的主题,但我就是找不到适合我的东西。如果它看起来太像复制品,我很抱歉。无论如何,我的问题是我正在尝试将以下 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() };

问题在于计数。它的结果是不正确的,这是完全正常的,因为我知道我搞砸了计数选择。

【问题讨论】:

  • 请告诉我们,到目前为止您尝试了哪些方法,以及出现问题的位置。
  • 我使用当前的 linq 查询编辑了我的帖子

标签: sql-server linq join count


【解决方案1】:

在考虑了更多关于如何在 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多