SQL转换asp.net

时间:2017-07-18 12:02:30

标签: sql asp.net

我在我的控制器中有这个请求:

            var documents = (from t in db.fooDocument
                        where (t.DocumentTypeID == 1 || t.DocumentTypeID == 2 || t.DocumentTypeID == 5) && t.ObjectID == objectID && t.RecordStatusID != 2
                        orderby t.DocDate
                        select new
                        {
                            t.DocumentID,
                            t.DocDate,
                            t.RegNumber,
                            t.UserID,
                            t.RecordDate,
                            t.RecordStatusID,
                            t.RegistrationDate,
                            t.Number,
                            t.Description,
                            t.ObjectID,
                            t.DocumentTypeID,
                            t.ContragentName,
                            DocumentTypeName = t.fooDocumentType.Name,
                            Summa = t.fooIncDocDetail.Where(d => d.RecordStatusID == 1).Sum(a => (decimal?)( a.Amount * a.Price + (a.Amount * a.Price) * (a.VATRate/100))) ?? 0
                                        }).Skip(pagesize * pagenum).Take(pagesize);

当在sql profiler中执行此请求时,它将转换为此moster:

exec sp_executesql N'SELECT TOP (10) 
[Project4].[DocumentTypeID] AS [DocumentTypeID], 
[Project4].[DocumentID] AS [DocumentID], 
[Project4].[DocDate] AS [DocDate], 
[Project4].[RegNumber] AS [RegNumber], 
[Project4].[UserID] AS [UserID], 
[Project4].[RecordDate] AS [RecordDate], 
[Project4].[RecordStatusID] AS [RecordStatusID], 
[Project4].[RegistrationDate] AS [RegistrationDate], 
[Project4].[Number] AS [Number], 
[Project4].[Description] AS [Description], 
[Project4].[ObjectID] AS [ObjectID], 
[Project4].[ContragentName] AS [ContragentName], 
[Project4].[Name] AS [Name], 
[Project4].[C1] AS [C1]
FROM ( SELECT [Project4].[DocumentID] AS [DocumentID], [Project4].[DocumentTypeID] AS [DocumentTypeID], [Project4].[DocDate] AS [DocDate], [Project4].[RegNumber] AS [RegNumber], [Project4].[UserID] AS [UserID], [Project4].[RecordDate] AS [RecordDate], [Project4].[RecordStatusID] AS [RecordStatusID], [Project4].[RegistrationDate] AS [RegistrationDate], [Project4].[Number] AS [Number], [Project4].[Description] AS [Description], [Project4].[ObjectID] AS [ObjectID], [Project4].[ContragentName] AS [ContragentName], [Project4].[Name] AS [Name], [Project4].[C1] AS [C1], row_number() OVER (ORDER BY [Project4].[DocDate] ASC) AS [row_number]
    FROM ( SELECT 
        [Project3].[DocumentID] AS [DocumentID], 
        [Project3].[DocumentTypeID] AS [DocumentTypeID], 
        [Project3].[DocDate] AS [DocDate], 
        [Project3].[RegNumber] AS [RegNumber], 
        [Project3].[UserID] AS [UserID], 
        [Project3].[RecordDate] AS [RecordDate], 
        [Project3].[RecordStatusID] AS [RecordStatusID], 
        [Project3].[RegistrationDate] AS [RegistrationDate], 
        [Project3].[Number] AS [Number], 
        [Project3].[Description] AS [Description], 
        [Project3].[ObjectID] AS [ObjectID], 
        [Project3].[ContragentName] AS [ContragentName], 
        [Project3].[Name] AS [Name], 
        CASE WHEN ([Project3].[C1] IS NULL) THEN cast(0 as decimal(18)) ELSE [Project3].[C2] END AS [C1]
        FROM ( SELECT 
            [Project2].[DocumentID] AS [DocumentID], 
            [Project2].[DocumentTypeID] AS [DocumentTypeID], 
            [Project2].[DocDate] AS [DocDate], 
            [Project2].[RegNumber] AS [RegNumber], 
            [Project2].[UserID] AS [UserID], 
            [Project2].[RecordDate] AS [RecordDate], 
            [Project2].[RecordStatusID] AS [RecordStatusID], 
            [Project2].[RegistrationDate] AS [RegistrationDate], 
            [Project2].[Number] AS [Number], 
            [Project2].[Description] AS [Description], 
            [Project2].[ObjectID] AS [ObjectID], 
            [Project2].[ContragentName] AS [ContragentName], 
            [Project2].[Name] AS [Name], 
            [Project2].[C1] AS [C1], 
            (SELECT 
                SUM([Filter3].[A1]) AS [A1]
                FROM ( SELECT 
                    ([Extent4].[Amount] * [Extent4].[Price]) + ([Extent4].[Amount] * [Extent4].[Price] * ([Extent4].[VATRate] / cast(100 as decimal(18)))) AS [A1]
                    FROM [dbo].[fooIncDocDetail] AS [Extent4]
                    WHERE ([Project2].[DocumentID] = [Extent4].[DocumentID]) AND (1 = [Extent4].[RecordStatusID])
                )  AS [Filter3]) AS [C2]
            FROM ( SELECT 
                [Project1].[DocumentID] AS [DocumentID], 
                [Project1].[DocumentTypeID] AS [DocumentTypeID], 
                [Project1].[DocDate] AS [DocDate], 
                [Project1].[RegNumber] AS [RegNumber], 
                [Project1].[UserID] AS [UserID], 
                [Project1].[RecordDate] AS [RecordDate], 
                [Project1].[RecordStatusID] AS [RecordStatusID], 
                [Project1].[RegistrationDate] AS [RegistrationDate], 
                [Project1].[Number] AS [Number], 
                [Project1].[Description] AS [Description], 
                [Project1].[ObjectID] AS [ObjectID], 
                [Project1].[ContragentName] AS [ContragentName], 
                [Project1].[Name] AS [Name], 
                (SELECT 
                    SUM([Filter2].[A1]) AS [A1]
                    FROM ( SELECT 
                        ([Extent3].[Amount] * [Extent3].[Price]) + ([Extent3].[Amount] * [Extent3].[Price] * ([Extent3].[VATRate] / cast(100 as decimal(18)))) AS [A1]
                        FROM [dbo].[fooIncDocDetail] AS [Extent3]
                        WHERE ([Project1].[DocumentID] = [Extent3].[DocumentID]) AND (1 = [Extent3].[RecordStatusID])
                    )  AS [Filter2]) AS [C1]
                FROM ( SELECT 
                    [Extent1].[DocumentID] AS [DocumentID], 
                    [Extent1].[DocumentTypeID] AS [DocumentTypeID], 
                    [Extent1].[DocDate] AS [DocDate], 
                    [Extent1].[RegNumber] AS [RegNumber], 
                    [Extent1].[UserID] AS [UserID], 
                    [Extent1].[RecordDate] AS [RecordDate], 
                    [Extent1].[RecordStatusID] AS [RecordStatusID], 
                    [Extent1].[RegistrationDate] AS [RegistrationDate], 
                    [Extent1].[Number] AS [Number], 
                    [Extent1].[Description] AS [Description], 
                    [Extent1].[ObjectID] AS [ObjectID], 
                    [Extent1].[ContragentName] AS [ContragentName], 
                    [Extent2].[Name] AS [Name]
                    FROM  [dbo].[fooDocument] AS [Extent1]
                    INNER JOIN [dbo].[fooDocumentType] AS [Extent2] ON [Extent1].[DocumentTypeID] = [Extent2].[DocumentTypeID]
                    WHERE ([Extent1].[DocumentTypeID] IN (1,2,5)) AND ([Extent1].[ObjectID] = @p__linq__0) AND (2 <> [Extent1].[RecordStatusID])
                )  AS [Project1]
            )  AS [Project2]
        )  AS [Project3]
    )  AS [Project4]
)  AS [Project4]
WHERE [Project4].[row_number] > 0
ORDER BY [Project4].[DocDate] ASC',N'@p__linq__0 int',@p__linq__0=4

但为什么,我该如何改变呢?在我的请求中,我只是从一个表中获取文档,对于每个文档,我必须在另一个表中计算该文档的所有相对行中的summ

0 个答案:

没有答案