fix(content): 修复导航列表查询EF Core LINQ翻译错误

- 将Dictionary.ContainsKey()从Select投影中移出
- 改为查询后在内存中映射StatusName
- 添加GetNavigationStatusName辅助方法
This commit is contained in:
zpc 2026-02-23 13:13:51 +08:00
parent 951536357a
commit fdf4fc7eca

View File

@ -564,6 +564,16 @@ public class ContentService : IContentService
{ 1, "已上线" }
};
/// <summary>
/// 获取导航状态名称
/// </summary>
/// <param name="status">状态值</param>
/// <returns>状态名称</returns>
private static string GetNavigationStatusName(int status)
{
return NavigationStatusNames.TryGetValue(status, out var name) ? name : "未知";
}
/// <summary>
/// 验证 Position 值
/// </summary>
@ -612,11 +622,16 @@ public class ContentService : IContentService
LinkUrl = n.LinkUrl,
Sort = n.Sort,
Status = n.Status,
StatusName = NavigationStatusNames.ContainsKey(n.Status) ? NavigationStatusNames[n.Status] : "未知",
CreateTime = n.CreateTime
})
.ToListAsync();
// 在内存中映射状态名称(避免 EF Core LINQ 翻译问题)
foreach (var item in items)
{
item.StatusName = GetNavigationStatusName(item.Status);
}
return PagedResult<HomeNavigationDto>.Create(items, total, request.Page, request.PageSize);
}
@ -634,7 +649,6 @@ public class ContentService : IContentService
LinkUrl = n.LinkUrl,
Sort = n.Sort,
Status = n.Status,
StatusName = NavigationStatusNames.ContainsKey(n.Status) ? NavigationStatusNames[n.Status] : "未知",
CreateTime = n.CreateTime
})
.FirstOrDefaultAsync();
@ -644,6 +658,9 @@ public class ContentService : IContentService
throw new BusinessException(ErrorCodes.NavigationNotFound, "首页导航不存在");
}
// 在内存中映射状态名称
nav.StatusName = GetNavigationStatusName(nav.Status);
return nav;
}