【问题标题】:Howto do a group by and having in Linq如何通过和在 Linq 中进行分组
【发布时间】:2017-05-13 04:48:28
【问题描述】:

看了几个关于如何创建具有 groupby 和 where 的 linq 查询的问题后,我自己尝试了,但没有运气。

我想将此 SQL 查询转换为相应的 linq 查询

select distinct city from zipcodedata 
group by city
having city like 'zw%'

这个查询在我的开发机器上大约 0.03 秒准备就绪,表中有 800 万条记录。但是当我尝试像这样创建一个 linq 查询时:

res = _context.Zipcodes
            .GroupBy(z => z.City)
            .Where(z => z.Key.Contains(query))
            .Select(z => z.Key)
            .ToList();

sql profiler 告诉我以下查询

SELECT [z].[Zipcode], [z].[Street], [z].[Streetnumber], [z].[City], [z]. [Latitude], [z].[Longitude], [z].[Municipality], [z].[Province]
FROM [ZipcodeData] AS [z]
ORDER BY [z].[City]

我没有看到哪里也没有,谁能解释一下为什么会发生这种情况。

作为脚注,我将 Dotnet CORE 1.1.0 与 EFCore 1.1.0 结合使用

【问题讨论】:

  • 你是在只是试图获得城市吗?如果是这样,我可能会写成_context.Zipcodes.Select(x => x.City).Where(c => c.Contains(query)).Distinct().ToList()
  • @JonSkeet 这不是我们想要的......而且仍然很慢。
  • 那么你想要什么?您的 SQL 看起来只是在获取不同的城市列表。您应该在问题中澄清,而不是让我们猜测。
  • 我想要与我在 SQLquery 中的内容对应的 Linq 查询。但我已经找到了我认为的答案。
  • 正如我所说,您的 SQL 查询似乎只是选择了一组符合条件的不同城市。这也是我建议的 LINQ 查询所做的。你没有解释区别。但听起来你不在乎把你的问题说清楚:(

标签: c# linq .net-core entity-framework-core


【解决方案1】:

经过进一步调查,我发现根据Feature Comparison between EF-Core and EF 在 EF-Core 中还不可能

上面写着Features not in EF Core --> Querying Data

GroupBy 翻译尤其会将 LINQ GroupBy 运算符的翻译移动到数据库中,而不是在内存中。

See this issue on Github 正是我在 SQL Profiler 中查看查询时所看到的:-(

我希望其他人会发现这个答案有用

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多