我有以下的记录集
ID BatchID ClientName CreatedDateTime
----------- -------------- --------------- -----------------------
1 NULL B 2018-02-16 19:07:46.320
2 NULL B 2018-02-16 19:07:46.320
3 NULL B 2018-02-16 19:07:46.597
4 NULL B 2018-02-16 19:07:46.597
5 NULL B 2018-02-16 19:10:10.260
6 NULL B 2018-02-16 19:10:10.260
7 NULL B 2018-02-16 19:21:34.303
8 NULL B 2018-02-16 19:21:34.303
9 NULL B 2018-02-16 19:21:44.780
10 NULL B 2018-02-16 19:21:44.780
11 NULL A 2018-02-16 19:24:35.623
12 NULL A 2018-02-16 19:24:35.623
13 NULL A 2018-02-16 19:24:42.867
14 NULL A 2018-02-16 19:24:42.867
我正在使用EF Core中的LINQ to SQL技术。 我想要过滤那些
BatchID
为空的记录,然后按照CreatedDateTime
排序,再按ClientName
分组,最后从第一组中取出前5条记录。
根据上面给定的记录集,它应该返回客户名为B
的Id为1,2,3,4,5的记录。
所以这是我的查询: var result = await _DBContext.BatchRequests
.Where(x => x.BatchID.HasValue == false)
.OrderBy(x => x.CreatedDateTime)
.GroupBy(x => x.ClientName)
.FirstAsync();
问题
1> 查询返回客户端 A
2> 如何只取前5条记录
更新 1
SQL Profiler 显示如下,甚至都不在 SQL 中分组
SELECT [x].[ID], [x].[BatchID], [x].[ClientName], [x].[CreatedDateTime]
FROM [BatchRequests] AS [x]
WHERE CASE
WHEN [x].[BatchID] IS NULL
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END <> 0
ORDER BY [x].[ClientName]
OrderBy
在GroupBy
之后没有太多意义 - 你必须对分组进行排序。那么你想如何对分组进行排序呢?(另外,一个简单的x.BatchID == null
可能会产生更好的 SQL。) - NetMage