【发布时间】: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