丢失了与 EFCore 一起使用的 order by 条款

问题描述 投票:0回答:1

晚上好。 我在使用 EFCore(Pomelo EF 8、.NET 8)进行查询时遇到问题。 调用查询的代码如下:

List<SelectListItem> retmodel = await dbContext.Certifications
    .Where(c => brevettiChePuoEmettere.Contains(c.Id) && c.Attivo == 1)
    .OrderByDescending(c => c.Livello).ThenBy(c => c.Descrizione)
    .Select(c => new SelectListItem { Value = c.Id.ToString(), Text = c.Descrizione, Selected = c.Id == selected })
    .Distinct()
    .ToListAsync();

输出查询为:

SELECT DISTINCT CAST(`t`.`Id` AS char) AS `Value`, `t`.`Descrizione` AS `Text`, `t`.`Id` = @__selected_1 AS `Selected`
FROM `t_certifications` AS `t`
WHERE `t`.`Id` IN (2, .........) AND (`t`.`Attivo` = 1)

我的 order by 条款去哪儿了? 我还尝试更改 Fluent API 中的顺序,但没有任何改变。 感谢任何可以提供建议的人。

asp.net-core entity-framework-core pomelo-entityframeworkcore-mysql
1个回答
0
投票

我发现了这些 EF Core GitHub 问题:

从这些我了解到,在这种情况下,

.OrderBy()
调用被“丢弃”(即它不会被转换为SQL代码),因为SQL Server在某些情况下不允许存在ORDER BY,而在其他情况下如果存在的话会忽略它

不幸的是,EF Core 内部的丢弃悄然发生。部分讨论是关于当

.OrderBy()
后面跟着
.Distinct()
时 EF 是否应该打印警告或抛出异常。

在大多数情况下修复应该很简单:先执行

.Distinct()
,然后执行
.OrderBy()

© www.soinside.com 2019 - 2024. All rights reserved.