C# 如何在Linq中进行分组

C# 如何在Linq中进行分组,c#,linq,.net-core,entity-framework-core,C#,Linq,.net Core,Entity Framework Core,在看了几个关于如何创建包含groupby和where的linq查询的问题后,我自己尝试了一下,但没有成功 我想将此SQL查询转换为相应的linq查询 select distinct city from zipcodedata group by city having city like 'zw%' 这个查询在我的开发机器上大约0,03秒就准备好了,表中有8mln条记录。但当我尝试创建一个linq查询时,如下所示: res = _context.Zipcodes .Gr

在看了几个关于如何创建包含groupby和where的linq查询的问题后,我自己尝试了一下,但没有成功

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

select distinct city from zipcodedata 
group by city
having city like 'zw%'
这个查询在我的开发机器上大约0,03秒就准备好了,表中有8mln条记录。但当我尝试创建一个linq查询时,如下所示:

res = _context.Zipcodes
            .GroupBy(z => z.City)
            .Where(z => z.Key.Contains(query))
            .Select(z => z.Key)
            .ToList();
sql分析器告诉我以下查询

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结合使用。经过进一步调查,我发现根据

它表示EF Core-->查询数据中没有的功能:

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

这正是我在SQL Profiler中查看查询时看到的:-(


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

在进一步调查后,我发现根据研究,在EF Core中这是不可能的

它表示EF Core-->查询数据中没有的功能:

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

这正是我在SQL Profiler中查看查询时看到的:-(


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

你只是想得到城市吗?如果是这样,我可能会把它写成
\u context.Zipcodes.Select(x=>x.City)。Where(c=>c.Contains(query)).Distinct().ToList()
@JonSkeet这不是我们想要的..而且仍然很慢。那么你想要什么?你的SQL看起来只是获取一个不同的城市列表。你应该在问题中澄清,而不是让我们猜测。我想要对应的Linq查询与我在SQLquery中的查询一致。但我想我已经找到了答案。正如我所说的,你的SQL查询just似乎选择了一组与某个条件相匹配的城市。我建议的LINQ查询也是这样做的。您还没有解释差异。但听起来您似乎并不关心清楚您的问题:(您只是想获取城市吗?如果是,我可能会将其写成
\u context.Zipcodes.select(x=>x.City)。在哪里(c=>c.Contains(query)).Distinct().ToList()
@JonSkeet这不是我们想要的..而且仍然很慢。那么你想要什么?你的SQL看起来只是获取一个不同的城市列表。你应该在问题中澄清,而不是让我们猜测。我想要对应的Linq查询与我在SQLquery中的查询一致。但我想我已经找到了答案。正如我所说的,你的SQL查询just似乎选择了一组与某个条件相匹配的不同城市。我建议的LINQ查询也是这样做的。您还没有解释差异。但听起来您似乎不在乎清楚您的问题:(