代码之家  ›  专栏  ›  技术社区  ›  CodeLikeBeaker

LINQ查询-奇数结果-OrderBy

  •  1
  • CodeLikeBeaker  · 技术社区  · 16 年前

    我有以下代码:

    int pageNumber = 0;
    int pageCount = 10;
    int numberOfRecords = 10;
    
        var query = V_ers_notice.Skip(pageNumber * pageCount).Take(numberOfRecords );
    
    return query.OrderByDescending(id => id.DOC_DATE).Select(ERSNoticeMap.DataToObject).ToList());
    

    public class ERSNoticeMap
    {
            public static readonly Func<V_ers_notice, OGeneralFile> DataToObject = mapper =>
                                              new OGeneralFile
                                              {
                                                  Docket = mapper.DOCKET,
                                                  DocumentDate = mapper.DOC_DATE,
                                                  FiledDate = mapper.FILED_DATE,
                                                  FileGuid = mapper.FGUID,
                                                  FileName = mapper.FName,
                                                  FilePath = mapper.FPathName,
                                                  FileSize = mapper.FSize,
                                                  FileType = mapper.FType,
                                                  Issuance = mapper.ISSUANCE,
                                                  Title = mapper.TITLE,
                                                  FileId = mapper.FID,
                                              };
    }
    

    public class OGeneralFile
        {
            public int FileId { get; set; }
            public Guid FileGuid { get; set; }
            public string FilePath { get; set; }
            public string FileName { get; set; }
            public string FileType { get; set; }
            public string FileSize { get; set; }
            public string Issuance { get; set; }
            public DateTime? DocumentDate { get; set; }
            public DateTime? FiledDate { get; set; }
            public string Docket { get; set; }
            public string Title { get; set; }
            public string Type { get; set; }
        }
    

    SELECT [t1].[fID] AS [FID], [t1].[fGUID] AS [FGUID], [t1].[fPathName] AS [FPathName], [t1].[fName] AS [FName], [t1].[fType] AS [FType], [t1].[fSize] AS [FSize], [t1].[ISSUANCE], [t1].[DOC_DATE], [t1].[FILED_DATE], [t1].[DOCKET], [t1].[TITLE]
    FROM (
        SELECT TOP (10) [t0].[fID], [t0].[fGUID], [t0].[fPathName], [t0].[fName], [t0].[fType], [t0].[fSize], [t0].[ISSUANCE], [t0].[DOC_DATE], [t0].[FILED_DATE], [t0].[DOCKET], [t0].[TITLE]
        FROM [v_ers_notice] AS [t0]
        ) AS [t1]
    ORDER BY [t1].[DOC_DATE] DESC
    

    当选择前10名时,order by应该在内部查询中,而不是在外部查询中。

    有没有想过为什么会发生这种情况?

    谢谢

    1 回复  |  直到 16 年前
        1
  •  7
  •   Mark Byers    16 年前

    我认为你的疑问是错误的。你需要 OrderBy 在您跳转和拍摄之前,而不是之后:

    var query = V_ers_notice.OrderByDescending(id => id.DOC_DATE)
                            .Skip(pageNumber * pageCount)
                            .Take(numberOfRecords );