Qua*_*023 6 c# sql-server asp.net asp.net-web-api entity-framework-core
我正在尝试获取按 desc 订购的客户的每种类型笔记之一的列表。在 SQL Server 中,我编写了以下查询
SELECT
note_id, st_id, note_type, signature_date
FROM
(SELECT
note_id, st_id, note_type, signature_date
ROW_NUMBER() OVER (PARTITION BY note_type ORDER BY signature_dateDESC) AS row_num
FROM
notes_log
WHERE
cl_id = 1
AND svce_type = 'service type 1'
AND (note_type = 'note type 1' OR note_type = 'note type 2' OR note_type = 'note type 3')
) AS subquery
WHERE row_num = 1
ORDER BY signature_date DESC;
Run Code Online (Sandbox Code Playgroud)
这个查询工作正常,但是当将上面的查询转换为 Linq 时,我遇到了一些错误。这就是我所做的
var lastNotes = await dbContext.Set<NotesLog>()
.Where(s => s.ClientId == id && s.ServiceType == serviceType && (s.NoteType == "type 1" || s.NoteType == "type 2" || s.NoteType == "type 3"))
.OrderByDescending(s => s.Signaturedate)
.GroupBy(s => s.NoteType)
.SelectMany(group => group.Take(1))
.Select(s => new
{
s.NoteId,
s.StateId,
s.NoteType,
s.Signaturedate
})
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
我还尝试将 GroupBy 和 Selectmany 交换为.DistinctBy(s => s.NoteType)
他们都返回了类似的错误
无法翻译。以可翻译的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式切换到客户端计算。
我知道我可以先获取所有笔记,然后查询列表以获取我需要的内容(我在网上找到了一些此类解决方案),但这样做对我来说没有多大意义。那么有没有更好的方法呢?
编辑我能够拼凑出一个解决方案(见下文),其中我得到每组一个的正确结果,但顺序不一致,而且似乎根本没有按降序排列。我正在寻找的是按降序排列的正确结果
提前致谢
您有多种选择:
在Linq 查询分组依据和选择第一项中查找更多信息
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |