Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EF父母中按子女的子女数排序?_C#_Sql_Sql Server_Entity Framework - Fatal编程技术网

C# 如何在EF父母中按子女的子女数排序?

C# 如何在EF父母中按子女的子女数排序?,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,我有团队编码人员项目组任务组 如何在实体框架中使用方法语法和代码优先方法(可能不加载子对象的子对象的整个集合内容,我只需要排序),根据任务数对团队进行有效排序 使EF生成此代码: SELECT [Project1].[ID] AS [ID], [Project1].[Title] AS [Title] FROM ( SELECT [Extent1].[ID] AS [ID], [Extent1].[Title] AS [Title]

我有团队编码人员项目组任务组

如何在实体框架中使用方法语法和代码优先方法(可能不加载子对象的子对象的整个集合内容,我只需要排序),根据任务数对团队进行有效排序

使EF生成此代码:

SELECT 
    [Project1].[ID] AS [ID], 
    [Project1].[Title] AS [Title]
    FROM ( SELECT 
        [Extent1].[ID] AS [ID], 
        [Extent1].[Title] AS [Title], 
        (SELECT 
            COUNT(1) AS [A1]
            FROM   [dbo].[NewBuildingObject] AS [Extent2]
            INNER JOIN [dbo].[NewBuildingHouse] AS [Extent3] ON [Extent2].[ID] = [Extent3].[ObjectID]
            INNER JOIN [dbo].[NewBuildingLayout] AS [Extent4] ON [Extent3].[ID] = [Extent4].[HouseID]
            WHERE [Extent1].[ID] = [Extent2].[BuilderID]) AS [C1]
        FROM [dbo].[Builder] AS [Extent1]
    )  AS [Project1]
    ORDER BY [Project1].[C1] ASC
SELECT 
    [Project1].[ID] AS [ID], 
    [Project1].[Title] AS [Title]
    FROM ( SELECT 
        [Extent1].[ID] AS [ID], 
        [Extent1].[Title] AS [Title], 
        (SELECT 
            COUNT(1) AS [A1]
            FROM  [dbo].[NewBuildingObject] AS [Extent2]
            INNER JOIN  (SELECT [Extent3].[ObjectID] AS [ObjectID]
                FROM  [dbo].[NewBuildingHouse] AS [Extent3]
                INNER JOIN [dbo].[NewBuildingLayout] AS [Extent4] ON [Extent3].[ID] = [Extent4].[HouseID] ) AS [Join1] ON [Extent2].[ID] = [Join1].[ObjectID]
            WHERE [Extent1].[ID] = [Extent2].[BuilderID]) AS [C1]
        FROM [dbo].[Builder] AS [Extent1]
    )  AS [Project1]
    ORDER BY [Project1].[C1] ASC
雅库布·马萨德的回答是:

context.Teams
.OrderBy(x => x.Coders
   .SelectMany(y => y.Projects)
   .SelectMany(y => y.Tasks)
   .Count());
var teams = context.Teams
    .OrderBy(team =>
        team.Coders.SelectMany(coder =>
            coder.Projects.SelectMany(project => project.Tasks)).Count());
制定此代码:

SELECT 
    [Project1].[ID] AS [ID], 
    [Project1].[Title] AS [Title]
    FROM ( SELECT 
        [Extent1].[ID] AS [ID], 
        [Extent1].[Title] AS [Title], 
        (SELECT 
            COUNT(1) AS [A1]
            FROM   [dbo].[NewBuildingObject] AS [Extent2]
            INNER JOIN [dbo].[NewBuildingHouse] AS [Extent3] ON [Extent2].[ID] = [Extent3].[ObjectID]
            INNER JOIN [dbo].[NewBuildingLayout] AS [Extent4] ON [Extent3].[ID] = [Extent4].[HouseID]
            WHERE [Extent1].[ID] = [Extent2].[BuilderID]) AS [C1]
        FROM [dbo].[Builder] AS [Extent1]
    )  AS [Project1]
    ORDER BY [Project1].[C1] ASC
SELECT 
    [Project1].[ID] AS [ID], 
    [Project1].[Title] AS [Title]
    FROM ( SELECT 
        [Extent1].[ID] AS [ID], 
        [Extent1].[Title] AS [Title], 
        (SELECT 
            COUNT(1) AS [A1]
            FROM  [dbo].[NewBuildingObject] AS [Extent2]
            INNER JOIN  (SELECT [Extent3].[ObjectID] AS [ObjectID]
                FROM  [dbo].[NewBuildingHouse] AS [Extent3]
                INNER JOIN [dbo].[NewBuildingLayout] AS [Extent4] ON [Extent3].[ID] = [Extent4].[HouseID] ) AS [Join1] ON [Extent2].[ID] = [Join1].[ObjectID]
            WHERE [Extent1].[ID] = [Extent2].[BuilderID]) AS [C1]
        FROM [dbo].[Builder] AS [Extent1]
    )  AS [Project1]
    ORDER BY [Project1].[C1] ASC

你可以试试类似的东西

context.Teams
.OrderBy(x => x.Coders
   .SelectMany(y => y.Projects)
   .SelectMany(y => y.Tasks)
   .Count());

您可以像这样使用
SelectMany

var teams = context.Teams
    .OrderBy(team =>
        team.Coders.SelectMany(coder =>
            coder.Projects.SelectMany(project => project.Tasks)).Count());

非常感谢。你的解决方案很有效。我认为这是最早的答案。