0

I'm using SQL Server 2008 and EntityFramework 6 in a MVC4 Application.

I'm using the following code for getting a Content from data base.

Content content = contentBusinessObject.SelectBy(contentPredicate.Expand(),
    new List<string>
    {
        "Tags",
        "User",
        "Attachments",
        "Products",
        "ContentEditors",
        "ContentEditors.User"
    });

[DataObjectMethod(DataObjectMethodType.Select)]
public TEntity SelectBy(Expression<Func<TEntity, bool>> predicate, List<string> includeNavigationProperties = null)
{
    if (includeNavigationProperties == null || includeNavigationProperties.Count <= 0)
        return DBSet.FirstOrDefault(predicate);
    DbQuery<TEntity> query = includeNavigationProperties.Aggregate<string, DbQuery<TEntity>>(DBSet, (current, property) => current.Include(property));
    return query.FirstOrDefault(predicate);
}

above code generates the following t-sql

exec sp_executesql N'SELECT 
    [UnionAll3].[C2] AS [C1], 
    [UnionAll3].[C3] AS [C2], 
    [UnionAll3].[C4] AS [C3], 
    ...
    [UnionAll3].[C107] AS [C107], 
    [UnionAll3].[C108] AS [C108], 
    [UnionAll3].[C109] AS [C109], 
    [UnionAll3].[C110] AS [C110], 
    [UnionAll3].[C111] AS [C111], 
    [UnionAll3].[C112] AS [C112], 
    [UnionAll3].[C113] AS [C113], 
    [UnionAll3].[C114] AS [C114], 
    [UnionAll3].[C115] AS [C115]
    FROM  (SELECT 
        [UnionAll2].[C1] AS [C1], 
        [UnionAll2].[C2] AS [C2], 
        [UnionAll2].[C3] AS [C3], 
        [UnionAll2].[C4] AS [C4], 
        [UnionAll2].[C5] AS [C5], 
        ...
        [UnionAll2].[C109] AS [C109], 
        [UnionAll2].[C110] AS [C110], 
        [UnionAll2].[C111] AS [C111], 
        [UnionAll2].[C112] AS [C112], 
        [UnionAll2].[C113] AS [C113], 
        [UnionAll2].[C114] AS [C114], 
        [UnionAll2].[C115] AS [C115]
        FROM  (SELECT 
            [UnionAll1].[C1] AS [C1], 
            [UnionAll1].[Id] AS [C2], 
            [UnionAll1].[Id1] AS [C3], 
            ...
            [UnionAll1].[C49] AS [C102], 
            [UnionAll1].[C50] AS [C103], 
            [UnionAll1].[C51] AS [C104], 
            [UnionAll1].[C52] AS [C105], 
            [UnionAll1].[C53] AS [C106], 
            [UnionAll1].[C54] AS [C107], 
            [UnionAll1].[C55] AS [C108], 
            [UnionAll1].[C56] AS [C109], 
            [UnionAll1].[C57] AS [C110], 
            [UnionAll1].[C58] AS [C111], 
            [UnionAll1].[C59] AS [C112], 
            [UnionAll1].[C60] AS [C113], 
            [UnionAll1].[C61] AS [C114], 
            [UnionAll1].[C62] AS [C115]
            FROM  (SELECT 
                CASE WHEN ([Join2].[ContentId] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1], 
                [Limit1].[Id] AS [Id], 
                [Limit1].[Id] AS [Id1], 
                [Limit1].[Title] AS [Title], 
                [Limit1].[Summary] AS [Summary], 
                [Limit1].[Context] AS [Context], 
                [Limit1].[ImagePath] AS [ImagePath], 
                [Limit1].[UserId] AS [UserId], 
                [Limit1].[VisitNumber] AS [VisitNumber], 
                  ...........
                [Join2].[Name] AS [Name], 
                [Join2].[Description] AS [Description], 
                [Join2].[ImagePath] AS [ImagePath1], 
                CAST(NULL AS int) AS [C2], 
                CAST(NULL AS varchar(1)) AS [C3], 
                CAST(NULL AS varchar(1)) AS [C4], 
                CAST(NULL AS varchar(1)) AS [C5], 
                CAST(NULL AS varchar(1)) AS [C6], 
                CAST(NULL AS varchar(1)) AS [C7], 
                CAST(NULL AS bigint) AS [C8], 
                CAST(NULL AS int) AS [C9], 
                CAST(NULL AS int) AS [C10], 
                CAST(NULL AS int) AS [C11], 
                CAST(NULL AS int) AS [C12], 
                CAST(NULL AS bit) AS [C13], 
                CAST(NULL AS datetime2) AS [C14], 
                CAST(NULL AS varchar(1)) AS [C15], 
                CAST(NULL AS int) AS [C16], 
                CAST(NULL AS varchar(1)) AS [C17], 
                CAST(NULL AS varchar(1)) AS [C18], 
                CAST(NULL AS varchar(1)) AS [C19], 
                CAST(NULL AS int) AS [C20], 
                CAST(NULL AS int) AS [C21], 
                CAST(NULL AS smallint) AS [C22], 
                CAST(NULL AS int) AS [C23], 
                CAST(NULL AS datetime2) AS [C24], 
                CAST(NULL AS bit) AS [C25], 
                CAST(NULL AS varchar(1)) AS [C26], 
                CAST(NULL AS int) AS [C27], 
                CAST(NULL AS int) AS [C28], 
                CAST(NULL AS int) AS [C29], 
                CAST(NULL AS int) AS [C30], 
                CAST(NULL AS bit) AS [C31], 
                CAST(NULL AS datetime2) AS [C32], 
                CAST(NULL AS varchar(1)) AS [C33], 
                CAST(NULL AS int) AS [C34], 
                CAST(NULL AS varchar(1)) AS [C35], 
                CAST(NULL AS varchar(1)) AS [C36], 
                CAST(NULL AS varchar(1)) AS [C37], 
                CAST(NULL AS varchar(1)) AS [C38], 
                CAST(NULL AS varchar(1)) AS [C39], 
                CAST(NULL AS int) AS [C40], 
                CAST(NULL AS bit) AS [C41], 
                CAST(NULL AS int) AS [C42], 
                CAST(NULL AS varchar(1)) AS [C43], 
                CAST(NULL AS varchar(1)) AS [C44], 
                CAST(NULL AS varchar(1)) AS [C45], 
                CAST(NULL AS varchar(1)) AS [C46], 
                CAST(NULL AS varchar(1)) AS [C47], 
                CAST(NULL AS datetime2) AS [C48], 
                CAST(NULL AS varchar(1)) AS [C49], 
                CAST(NULL AS datetime2) AS [C50], 
                CAST(NULL AS int) AS [C51], 
                CAST(NULL AS int) AS [C52], 
                CAST(NULL AS datetime2) AS [C53], 
                CAST(NULL AS int) AS [C54], 
                CAST(NULL AS varchar(1)) AS [C55], 
                CAST(NULL AS varchar(1)) AS [C56], 
                CAST(NULL AS varchar(1)) AS [C57], 
                CAST(NULL AS int) AS [C58], 
                CAST(NULL AS varchar(1)) AS [C59], 
                CAST(NULL AS varchar(1)) AS [C60], 
                CAST(NULL AS varchar(1)) AS [C61], 
                CAST(NULL AS varchar(1)) AS [C62]
                FROM   (SELECT TOP (1) 
                    [Extent1].[Id] AS [Id], 
                    [Extent1].[Title] AS [Title], 
                    [Extent1].[Summary] AS [Summary], 
                    [Extent1].[Context] AS [Context], 
                    [Extent1].[Keywords] AS [Keywords], 
                    [Extent1].[ImagePath] AS [ImagePath], 
                    [Extent1].[UserId] AS [UserId], 
                    [Extent1].[VisitNumber] AS [VisitNumber], 
                    [Extent1].[LanguageId] AS [LanguageId], 
                    [Extent1].[ReferenceName] AS [ReferenceName], 
                    .....
                    [Extent2].[TwitterPage] AS [TwitterPage], 
                    [Extent2].[FaceBookPage] AS [FaceBookPage], 
                    [Extent2].[PersianblogPage] AS [PersianblogPage], 
                    [Extent2].[ProfileVisitedNumber] AS [ProfileVisitedNumber], 
                    [Extent2].[MinSalary] AS [MinSalary], 
                    [Extent2].[Telephone] AS [Telephone], 
                    [Extent2].[Mobile] AS [Mobile], 
                    [Extent2].[ZipCode] AS [ZipCode], 
                    [Extent2].[ProvinceId] AS [ProvinceId], 
                    [Extent2].[City] AS [City], 
                    [Extent2].[Address] AS [Address], 
                    [Extent2].[LastRecoveryPasswordDate] AS [LastRecoveryPasswordDate], 
                    [Extent2].[LastIP] AS [LastIP], 
                    [Extent2].[RegistrationDate] AS [RegistrationDate1], 
                    [Extent2].[PersianRegistrationDate] AS [PersianRegistrationDate1]
                    FROM  [dbo].[Content] AS [Extent1]
                    INNER JOIN [dbo].[User] AS [Extent2] ON [Extent1].[UserId] = [Extent2].[Id]
                    WHERE ([Extent1].[Id] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) AND ((([Extent1].[LanguageId] = @p__linq__1) AND ( NOT ([Extent1].[LanguageId] IS NULL OR @p__linq__1 IS NULL))) OR (([Extent1].[LanguageId] IS NULL) AND (@p__linq__1 IS NULL))) AND ((([Extent1].[StatusId] = @p__linq__2) AND ( NOT ([Extent1].[StatusId] IS NULL OR @p__linq__2 IS NULL))) OR (([Extent1].[StatusId] IS NULL) AND (@p__linq__2 IS NULL))) ) AS [Limit1]
                LEFT OUTER JOIN  (SELECT [Extent3].[ContentId] AS [ContentId], [Extent4].[Id] AS [Id], [Extent4].[Name] AS [Name], [Extent4].[Description] AS [Description], [Extent4].[ImagePath] AS [ImagePath]
                    FROM  [dbo].[TagContent] AS [Extent3]
                    INNER JOIN [dbo].[Tag] AS [Extent4] ON [Extent4].[Id] = [Extent3].[TagId] ) AS [Join2] ON [Limit1].[Id] = [Join2].[ContentId]
            UNION ALL
                SELECT 
                2 AS [C1], 
                [Limit2].[Id] AS [Id], 
                [Limit2].[Id] AS [Id1], 
                [Limit2].[Title] AS [Title], 
                [Limit2].[Summary] AS [Summary], 
                [Limit2].[Context] AS [Context], 
                [Limit2].[ImagePath] AS [ImagePath], 
                [Limit2].[UserId] AS [UserId], 
                [Limit2].[VisitNumber] AS [VisitNumber], 
                [Limit2].[LanguageId] AS [LanguageId], 
                [Limit2].[ReferenceName] AS [ReferenceName], 
                [Limit2].[ReferenceLink] AS [ReferenceLink], 
                .....
                [Extent7].[Path] AS [Path], 
                [Extent7].[Size] AS [Size], 
                [Extent7].[OrderNumber] AS [OrderNumber], 
                [Extent7].[GroupNumber] AS [GroupNumber], 
                [Extent7].[ContentId] AS [ContentId], 
                [Extent7].[MessageId] AS [MessageId], 
                [Extent7].[IsDownload] AS [IsDownload], 
                [Extent7].[RegistrationDate] AS [RegistrationDate2], 
                [Extent7].[PersianRegistrationDate] AS [PersianRegistrationDate2], 
                CAST(NULL AS int) AS [C6], 
                CAST(NULL AS varchar(1)) AS [C7], 
                CAST(NULL AS varchar(1)) AS [C8], 
                CAST(NULL AS varchar(1)) AS [C9], 
                CAST(NULL AS int) AS [C10], 
                CAST(NULL AS int) AS [C11], 
                CAST(NULL AS smallint) AS [C12], 
                CAST(NULL AS int) AS [C13], 
                CAST(NULL AS datetime2) AS [C14], 
                CAST(NULL AS bit) AS [C15], 
                CAST(NULL AS varchar(1)) AS [C16], 
                CAST(NULL AS int) AS [C17], 
                CAST(NULL AS int) AS [C18], 
                CAST(NULL AS int) AS [C19], 
                CAST(NULL AS int) AS [C20], 
                CAST(NULL AS bit) AS [C21], 
                CAST(NULL AS datetime2) AS [C22], 
                CAST(NULL AS varchar(1)) AS [C23], 
                CAST(NULL AS int) AS [C24], 
                CAST(NULL AS varchar(1)) AS [C25], 
                CAST(NULL AS varchar(1)) AS [C26], 
                CAST(NULL AS varchar(1)) AS [C27], 
                CAST(NULL AS varchar(1)) AS [C28], 
                CAST(NULL AS varchar(1)) AS [C29], 
                CAST(NULL AS int) AS [C30], 
                CAST(NULL AS bit) AS [C31], 
                CAST(NULL AS int) AS [C32], 
                CAST(NULL AS varchar(1)) AS [C33], 
                CAST(NULL AS varchar(1)) AS [C34], 
                CAST(NULL AS varchar(1)) AS [C35], 
                CAST(NULL AS varchar(1)) AS [C36], 
                CAST(NULL AS varchar(1)) AS [C37], 
                CAST(NULL AS datetime2) AS [C38], 
                CAST(NULL AS varchar(1)) AS [C39], 
                CAST(NULL AS datetime2) AS [C40], 
                CAST(NULL AS int) AS [C41], 
                CAST(NULL AS int) AS [C42], 
                CAST(NULL AS datetime2) AS [C43], 
                CAST(NULL AS int) AS [C44], 
                CAST(NULL AS varchar(1)) AS [C45], 
                CAST(NULL AS varchar(1)) AS [C46], 
                CAST(NULL AS varchar(1)) AS [C47], 
                CAST(NULL AS int) AS [C48], 
                CAST(NULL AS varchar(1)) AS [C49], 
                CAST(NULL AS varchar(1)) AS [C50], 
                CAST(NULL AS varchar(1)) AS [C51], 
                CAST(NULL AS varchar(1)) AS [C52]
                FROM   (SELECT TOP (1) 
                    [Extent5].[Id] AS [Id], 
                    [Extent5].[Title] AS [Title], 
                    [Extent5].[Summary] AS [Summary], 
                    [Extent5].[Context] AS [Context], 
                    [Extent5].[Keywords] AS [Keywords], 
                    [Extent5].[ImagePath] AS [ImagePath], 
                    [Extent5].[UserId] AS [UserId], 
                    [Extent5].[VisitNumber] AS [VisitNumber], 
                    [Extent5].[LanguageId] AS [LanguageId], 
                    [Extent5].[ReferenceName] AS [ReferenceName], 
                    [Extent5].[ReferenceLink] AS [ReferenceLink], 
                    [Extent5].[IsSpecial] AS [IsSpecial], 
                     ......
                    [Extent6].[ProfileVisitedNumber] AS [ProfileVisitedNumber], 
                    [Extent6].[MinSalary] AS [MinSalary], 
                    [Extent6].[Telephone] AS [Telephone], 
                    [Extent6].[Mobile] AS [Mobile], 
                    [Extent6].[ZipCode] AS [ZipCode], 
                    [Extent6].[ProvinceId] AS [ProvinceId], 
                    [Extent6].[City] AS [City], 
                    [Extent6].[Address] AS [Address], 
                    [Extent6].[LastRecoveryPasswordDate] AS [LastRecoveryPasswordDate], 
                    [Extent6].[LastIP] AS [LastIP], 
                    [Extent6].[RegistrationDate] AS [RegistrationDate1], 
                    [Extent6].[PersianRegistrationDate] AS [PersianRegistrationDate1]
                    FROM  [dbo].[Content] AS [Extent5]
                    INNER JOIN [dbo].[User] AS [Extent6] ON [Extent5].[UserId] = [Extent6].[Id]
                    WHERE ([Extent5].[Id] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) AND ((([Extent5].[LanguageId] = @p__linq__1) AND ( NOT ([Extent5].[LanguageId] IS NULL OR @p__linq__1 IS NULL))) OR (([Extent5].[LanguageId] IS NULL) AND (@p__linq__1 IS NULL))) AND ((([Extent5].[StatusId] = @p__linq__2) AND ( NOT ([Extent5].[StatusId] IS NULL OR @p__linq__2 IS NULL))) OR (([Extent5].[StatusId] IS NULL) AND (@p__linq__2 IS NULL))) ) AS [Limit2]
                INNER JOIN [dbo].[Attachment] AS [Extent7] ON [Limit2].[Id] = [Extent7].[ContentId]) AS [UnionAll1]
        UNION ALL
            SELECT 
            3 AS [C1], 
            [Limit3].[Id] AS [Id], 
            [Limit3].[Id] AS [Id1], 
            [Limit3].[Title] AS [Title], 
            [Limit3].[Summary] AS [Summary], 
            [Limit3].[Context] AS [Context], 
            [Limit3].[ImagePath] AS [ImagePath], 
            [Limit3].[UserId] AS [UserId], 
            [Limit3].[VisitNumber] AS [VisitNumber], 
            [Limit3].[LanguageId] AS [LanguageId], 
            [Limit3].[ReferenceName] AS [ReferenceName], 
            [Limit3].[ReferenceLink] AS [ReferenceLink], 
            .....
            [Limit3].[ZipCode] AS [ZipCode], 
            [Limit3].[ProvinceId] AS [ProvinceId], 
            [Limit3].[City] AS [City], 
            [Limit3].[Address] AS [Address], 
            [Limit3].[LastIP] AS [LastIP], 
            [Limit3].[PersianRegistrationDate1] AS [PersianRegistrationDate1], 
            CAST(NULL AS int) AS [C2], 
            CAST(NULL AS varchar(1)) AS [C3], 
            CAST(NULL AS varchar(1)) AS [C4], 
            CAST(NULL AS varchar(1)) AS [C5], 
            CAST(NULL AS int) AS [C6], 
            CAST(NULL AS varchar(1)) AS [C7], 
            CAST(NULL AS varchar(1)) AS [C8], 
            CAST(NULL AS varchar(1)) AS [C9], 
            CAST(NULL AS varchar(1)) AS [C10], 
            CAST(NULL AS varchar(1)) AS [C11], 
            CAST(NULL AS bigint) AS [C12], 
            CAST(NULL AS int) AS [C13], 
            CAST(NULL AS int) AS [C14], 
            CAST(NULL AS int) AS [C15], 
            CAST(NULL AS int) AS [C16], 
            CAST(NULL AS bit) AS [C17], 
            CAST(NULL AS datetime2) AS [C18], 
            CAST(NULL AS varchar(1)) AS [C19], 
            [Extent10].[Id] AS [Id3], 
            [Extent10].[Name] AS [Name], 
            [Extent10].[Description] AS [Description], 
            [Extent10].[ImagePath] AS [ImagePath1], 
            [Extent10].[Price] AS [Price], 
            [Extent10].[ContentId] AS [ContentId], 
            [Extent10].[OrderNumber] AS [OrderNumber], 
            [Extent10].[StatusId] AS [StatusId2], 
            [Extent10].[RegistrationDate] AS [RegistrationDate2], 
            [Extent10].[IsDeleted] AS [IsDeleted], 
            [Extent10].[PersianRegistrationDate] AS [PersianRegistrationDate2], 
            CAST(NULL AS int) AS [C20], 
            CAST(NULL AS int) AS [C21], 
            CAST(NULL AS int) AS [C22], 
            CAST(NULL AS int) AS [C23], 
            CAST(NULL AS bit) AS [C24], 
            CAST(NULL AS datetime2) AS [C25], 
            CAST(NULL AS varchar(1)) AS [C26], 
            CAST(NULL AS int) AS [C27], 
            CAST(NULL AS varchar(1)) AS [C28], 
            CAST(NULL AS varchar(1)) AS [C29], 
            CAST(NULL AS varchar(1)) AS [C30], 
            CAST(NULL AS varchar(1)) AS [C31], 
            CAST(NULL AS varchar(1)) AS [C32], 
            CAST(NULL AS int) AS [C33], 
            CAST(NULL AS bit) AS [C34], 
            CAST(NULL AS int) AS [C35], 
            CAST(NULL AS varchar(1)) AS [C36], 
            CAST(NULL AS varchar(1)) AS [C37], 
            CAST(NULL AS varchar(1)) AS [C38], 
            CAST(NULL AS varchar(1)) AS [C39], 
            CAST(NULL AS varchar(1)) AS [C40], 
            CAST(NULL AS datetime2) AS [C41], 
            CAST(NULL AS varchar(1)) AS [C42], 
            CAST(NULL AS datetime2) AS [C43], 
            CAST(NULL AS int) AS [C44], 
            CAST(NULL AS int) AS [C45], 
            CAST(NULL AS datetime2) AS [C46], 
            CAST(NULL AS int) AS [C47], 
            CAST(NULL AS varchar(1)) AS [C48], 
            CAST(NULL AS varchar(1)) AS [C49], 
            CAST(NULL AS varchar(1)) AS [C50], 
            CAST(NULL AS int) AS [C51], 
            CAST(NULL AS varchar(1)) AS [C52], 
            CAST(NULL AS varchar(1)) AS [C53], 
            CAST(NULL AS varchar(1)) AS [C54], 
            CAST(NULL AS varchar(1)) AS [C55]
            FROM   (SELECT TOP (1) 
                [Extent8].[Id] AS [Id], 
                [Extent8].[Title] AS [Title], 
                [Extent8].[Summary] AS [Summary], 
                [Extent8].[Context] AS [Context], 
                [Extent8].[Keywords] AS [Keywords], 
                [Extent8].[ImagePath] AS [ImagePath], 
                [Extent8].[UserId] AS [UserId], 
                ....
                [Extent9].[ProfileVisitedNumber] AS [ProfileVisitedNumber], 
                [Extent9].[MinSalary] AS [MinSalary], 
                [Extent9].[Telephone] AS [Telephone], 
                [Extent9].[Mobile] AS [Mobile], 
                [Extent9].[ZipCode] AS [ZipCode], 
                [Extent9].[ProvinceId] AS [ProvinceId], 
                [Extent9].[City] AS [City], 
                [Extent9].[Address] AS [Address], 
                [Extent9].[LastRecoveryPasswordDate] AS [LastRecoveryPasswordDate], 
                [Extent9].[LastIP] AS [LastIP], 
                [Extent9].[RegistrationDate] AS [RegistrationDate1], 
                [Extent9].[PersianRegistrationDate] AS [PersianRegistrationDate1]
                FROM  [dbo].[Content] AS [Extent8]
                INNER JOIN [dbo].[User] AS [Extent9] ON [Extent8].[UserId] = [Extent9].[Id]
                WHERE ([Extent8].[Id] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) AND ((([Extent8].[LanguageId] = @p__linq__1) AND ( NOT ([Extent8].[LanguageId] IS NULL OR @p__linq__1 IS NULL))) OR (([Extent8].[LanguageId] IS NULL) AND (@p__linq__1 IS NULL))) AND ((([Extent8].[StatusId] = @p__linq__2) AND ( NOT ([Extent8].[StatusId] IS NULL OR @p__linq__2 IS NULL))) OR (([Extent8].[StatusId] IS NULL) AND (@p__linq__2 IS NULL))) ) AS [Limit3]
            INNER JOIN [dbo].[Product] AS [Extent10] ON [Limit3].[Id] = [Extent10].[ContentId]) AS [UnionAll2]
    UNION ALL
        SELECT 
        4 AS [C1], 
        [Limit4].[Id] AS [Id], 
        [Limit4].[Id] AS [Id1], 
        [Limit4].[Title] AS [Title], 
        [Limit4].[Summary] AS [Summary], 
        [Limit4].[Context] AS [Context], 
        [Limit4].[ImagePath] AS [ImagePath], 
        [Limit4].[UserId] AS [UserId], 
        [Limit4].[VisitNumber] AS [VisitNumber], 
        .....
        [Limit4].[City] AS [City], 
        [Limit4].[Address] AS [Address], 
        [Limit4].[LastIP] AS [LastIP], 
        [Limit4].[PersianRegistrationDate1] AS [PersianRegistrationDate1], 
        CAST(NULL AS int) AS [C2], 
        CAST(NULL AS varchar(1)) AS [C3], 
        CAST(NULL AS varchar(1)) AS [C4], 
        CAST(NULL AS varchar(1)) AS [C5], 
        CAST(NULL AS int) AS [C6], 
        CAST(NULL AS varchar(1)) AS [C7], 
        CAST(NULL AS varchar(1)) AS [C8], 
        ....
        CAST(NULL AS varchar(1)) AS [C23], 
        CAST(NULL AS int) AS [C24], 
        CAST(NULL AS int) AS [C25], 
        CAST(NULL AS smallint) AS [C26], 
        CAST(NULL AS int) AS [C27], 
        CAST(NULL AS datetime2) AS [C28], 
        CAST(NULL AS bit) AS [C29], 
        CAST(NULL AS varchar(1)) AS [C30], 
        [Join9].[Id1] AS [Id3], 
        [Join9].[Id1] AS [Id4], 
        ...
        [Join9].[City] AS [City1], 
        [Join9].[Address] AS [Address1], 
        [Join9].[LastIP] AS [LastIP1], 
        [Join9].[PersianRegistrationDate] AS [PersianRegistrationDate2]
        FROM   (SELECT TOP (1) 
            [Extent11].[Id] AS [Id], 
            [Extent11].[Title] AS [Title], 
            [Extent11].[Summary] AS [Summary], 
            [Extent11].[Context] AS [Context], 
            [Extent11].[Keywords] AS [Keywords], 
            [Extent11].[ImagePath] AS [ImagePath], 
            [Extent11].[UserId] AS [UserId], 
            [Extent11].[VisitNumber] AS [VisitNumber], 
            [Extent11].[LanguageId] AS [LanguageId], 
            [Extent11].[ReferenceName] AS [ReferenceName], 
            [Extent11].[ReferenceLink] AS [ReferenceLink], 
            [Extent11].[IsSpecial] AS [IsSpecial], 
            [Extent11].[RegistrationDate] AS [RegistrationDate], 
            [Extent11].[StatusId] AS [StatusId], 
            [Extent11].[SubjectId] AS [SubjectId], 
            [Extent11].[LockCommenting] AS [LockCommenting], 
            [Extent11].[AllTagsString] AS [AllTagsString], 
            [Extent11].[OnlyVisibleToMembers] AS [OnlyVisibleToMembers], 
            [Extent11].[PersianRegistrationDate] AS [PersianRegistrationDate], 
            [Extent12].[Id] AS [Id1], 
            [Extent12].[FirstName] AS [FirstName], 
            [Extent12].[LastName] AS [LastName], 
            [Extent12].[FullName] AS [FullName], 
            [Extent12].[Username] AS [Username], 
            [Extent12].[Password] AS [Password], 
            [Extent12].[Email] AS [Email], 
            [Extent12].[RoleId] AS [RoleId], 
            [Extent12].[IsAdmin] AS [IsAdmin], 
            [Extent12].[LanguageId] AS [LanguageId1], 
            [Extent12].[PhotoPath] AS [PhotoPath], 
            [Extent12].[StatusId] AS [StatusId1], 
            [Extent12].[LastVisitDate] AS [LastVisitDate], 
            [Extent12].[AboutUser] AS [AboutUser], 
            [Extent12].[TwitterPage] AS [TwitterPage], 
            [Extent12].[FaceBookPage] AS [FaceBookPage], 
            [Extent12].[PersianblogPage] AS [PersianblogPage], 
            [Extent12].[ProfileVisitedNumber] AS [ProfileVisitedNumber], 
            [Extent12].[MinSalary] AS [MinSalary], 
            [Extent12].[Telephone] AS [Telephone], 
            [Extent12].[Mobile] AS [Mobile], 
            [Extent12].[ZipCode] AS [ZipCode], 
            [Extent12].[ProvinceId] AS [ProvinceId], 
            [Extent12].[City] AS [City], 
            [Extent12].[Address] AS [Address], 
            [Extent12].[LastRecoveryPasswordDate] AS [LastRecoveryPasswordDate], 
            [Extent12].[LastIP] AS [LastIP], 
            [Extent12].[RegistrationDate] AS [RegistrationDate1], 
            [Extent12].[PersianRegistrationDate] AS [PersianRegistrationDate1]
            FROM  [dbo].[Content] AS [Extent11]
            INNER JOIN [dbo].[User] AS [Extent12] ON [Extent11].[UserId] = [Extent12].[Id]
            WHERE ([Extent11].[Id] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) AND ((([Extent11].[LanguageId] = @p__linq__1) AND ( NOT ([Extent11].[LanguageId] IS NULL OR @p__linq__1 IS NULL))) OR (([Extent11].[LanguageId] IS NULL) AND (@p__linq__1 IS NULL))) AND ((([Extent11].[StatusId] = @p__linq__2) AND ( NOT ([Extent11].[StatusId] IS NULL OR @p__linq__2 IS NULL))) OR (([Extent11].[StatusId] IS NULL) AND (@p__linq__2 IS NULL))) ) AS [Limit4]
        INNER JOIN  (SELECT [Extent13].[Id] AS [Id1], [Extent13].[ContentId] AS [ContentId], [Extent13].[UserId] AS [UserId], [Extent13].[IsReadyToPublish] AS [IsReadyToPublish], [Extent13].[EditDate] AS [EditDate], [Extent13].[PersianEditDate] AS [PersianEditDate], [Extent14].[Id] AS [Id2], [Extent14].[FirstName] AS [FirstName], [Extent14].[LastName] AS [LastName], [Extent14].[FullName] AS [FullName], [Extent14].[Username] AS [Username], [Extent14].[Password] AS [Password], [Extent14].[Email] AS [Email], [Extent14].[RoleId] AS [RoleId], [Extent14].[IsAdmin] AS [IsAdmin], [Extent14].[LanguageId] AS [LanguageId], [Extent14].[PhotoPath] AS [PhotoPath], [Extent14].[StatusId] AS [StatusId], [Extent14].[LastVisitDate] AS [LastVisitDate], [Extent14].[AboutUser] AS [AboutUser], [Extent14].[TwitterPage] AS [TwitterPage], [Extent14].[FaceBookPage] AS [FaceBookPage], [Extent14].[PersianblogPage] AS [PersianblogPage], [Extent14].[ProfileVisitedNumber] AS [ProfileVisitedNumber], [Extent14].[MinSalary] AS [MinSalary], [Extent14].[Telephone] AS [Telephone], [Extent14].[Mobile] AS [Mobile], [Extent14].[ZipCode] AS [ZipCode], [Extent14].[ProvinceId] AS [ProvinceId], [Extent14].[City] AS [City], [Extent14].[Address] AS [Address], [Extent14].[LastRecoveryPasswordDate] AS [LastRecoveryPasswordDate], [Extent14].[LastIP] AS [LastIP], [Extent14].[RegistrationDate] AS [RegistrationDate], [Extent14].[PersianRegistrationDate] AS [PersianRegistrationDate]
            FROM  [dbo].[ContentEditor] AS [Extent13]
            INNER JOIN [dbo].[User] AS [Extent14] ON [Extent13].[UserId] = [Extent14].[Id] ) AS [Join9] ON [Limit4].[Id] = [Join9].[ContentId]) AS [UnionAll3]
    ORDER BY [UnionAll3].[C3] ASC, [UnionAll3].[C22] ASC, [UnionAll3].[C1] ASC',N'@p__linq__0 int,@p__linq__1 int,@p__linq__2 int',@p__linq__0=2223,@p__linq__1=1,@p__linq__2=2

Is there a way to optimize it? if there is no way, how can we write a optimized store procedure instead of above EF code ?

1 Answer 1

2

There is no way to modify the generated SQL from EF. If you need more optimal SQL then your best option would be to write your own Stored Procedure and call that instead.

Sign up to request clarification or add additional context in comments.

4 Comments

Could you please guide me how can I write a optimized store procedure for above query ?
@Mohammad that wasn't the question, if you have an SQL statement you wish to optimize I suggest you create a separate question for that detailing why your current SQL statement isn't efficient enough for you. The generated SQL in you question appears pretty complex with a lot of unions/joins - this is probably the reason why it's not terribly fast.
You can use dbContext.Database.SqlQuery<T>(string sql); to run your own sql
@BappiDatta yeah, which is effectively TSQL with the extra overhead of sending across the wire. Considering SPs are pre-compiled and already on the server they are more optimal.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.