小编Jam*_*ath的帖子

使实体框架(使用 Linq 查询)使用自定义字段的别名,而不是重做子查询

有没有办法强制实体框架使用子查询的别名,而不是为 OrderBy 加倍它?

var results = Users.Select( u => new 
  { 
    u.idUser, 
    u.Name, 
    nbChilds = u.Children.Count 
  })
  .OrderBy( u => u.nbChilds );
Run Code Online (Sandbox Code Playgroud)

这将在 SQL 中转换为:

SELECT [u].[idUser] AS [idUser], [u].[name] AS [Name], (
    SELECT COUNT(*)
    FROM [Children] AS [c0]
) AS [nbChilds]
FROM [Users] AS [u]
ORDER BY (
    SELECT COUNT(*)
    FROM [Children] AS [c]
)
Run Code Online (Sandbox Code Playgroud)

这意味着它将对子项进行两次计数。就我而言,这对性能造成严重影响,我想避免。有没有办法告诉 Linq 在选择中使用别名,以便输出为:

SELECT [u].[idUser] AS [idUser], [u].[name] AS [Name], (
    SELECT COUNT(*)
    FROM [Children] AS [c0]
) AS [nbChilds]
FROM [Users] AS [u] …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework entity-framework-core

5
推荐指数
1
解决办法
6785
查看次数