Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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# PetaPoco分页查询生成改进_C#_Sql_Petapoco - Fatal编程技术网

C# PetaPoco分页查询生成改进

C# PetaPoco分页查询生成改进,c#,sql,petapoco,C#,Sql,Petapoco,我是PetaPoco的超级粉丝,当我看到里面写的代码时,我感到非常惊讶。然而,在将其用于实际项目时,我遇到了一个问题,我有一个类似这样的问题: SELECT em.SysEmailID, [DisplayID], Case When em.SysEmailCategoryID IS NULL Then em.CategoryName Else cat.CategoryName End as 'ResultCategoryName', [N

我是PetaPoco的超级粉丝,当我看到里面写的代码时,我感到非常惊讶。然而,在将其用于实际项目时,我遇到了一个问题,我有一个类似这样的问题:

SELECT  em.SysEmailID, 
        [DisplayID], 
         Case When em.SysEmailCategoryID IS NULL Then em.CategoryName Else cat.CategoryName End as 'ResultCategoryName',
         [Name], 
         IsActive, 
         em.ModifiedDateTime, 
         us.Username  
            FROM [dbo].[SysEmail] em 
                Left JOIN dbo.Users us ON em.CreatedBy = us.UserID  
                    Left JOIN dbo.SysEmailCategory cat on em.SysEmailCategoryID = cat.SysEmailCategoryID 
ResultCategoryName是使用Case-When语句动态生成的。这是一个相当简单的查询。现在,如果您注意到用PetaPoco编写的代码,您将看到它包装了您的语句,并附加了行数函数。因此,您的查询变成:

SELECT * FROM 
    (
        SELECT ROW_NUMBER() OVER (ORDER BY ResultCategoryName desc) peta_rn,
         em.SysEmailID, 
         [DisplayID], 
         Case When em.SysEmailCategoryID IS NULL Then em.CategoryName Else cat.CategoryName End as 
         'ResultCategoryName',
         [Name], 
         IsActive, 
         em.ModifiedDateTime, 
         us.Username  
            FROM [dbo].[SysEmail] em Left JOIN dbo.Users us ON em.CreatedBy = us.UserID  
                Left JOIN dbo.SysEmailCategory cat on em.SysEmailCategoryID = cat.SysEmailCategoryID 

     ) peta_paged WHERE peta_rn>0 AND peta_rn<=10
这就产生了查询:

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ResultCategoryName asc) peta_rn, 
    peta_query.* 
        From (
                Select em.SysEmailID, [DisplayID], 
                Case When em.SysEmailCategoryID IS NULL Then em.CategoryName Else cat.CategoryName End as 'ResultCategoryName',
                [Name], 
                IsActive, 
                em.ModifiedDateTime, 
                us.Username  
                    FROM [dbo].[SysEmail] em Left JOIN dbo.Users us ON em.CreatedBy = us.UserID  
                        Left JOIN dbo.SysEmailCategory cat on em.SysEmailCategoryID = cat.SysEmailCategoryID 
                            ) as peta_query) peta_paged WHERE peta_rn>0 AND peta_rn<=10

这很有效!!:。但是,我需要知道这是正确的方法还是有更好的方法。

您所要做的就是用另一个select来包装sql

例如


您只需要在计算了列后执行此操作。

Oh OK。我已经修改了我的PetaPoco源代码本身,所以我不需要每次都这样做。我想即使每次都有额外的Select*from,性能也不会受到影响。在查询分析器中,它可能几乎不到1%,甚至可能是0%。我将在下一个主要版本中对此进行研究。这需要支持几个场景。干杯,谢谢你。我也在github上为它创建了一个问题。。顺便说一句,下一个主要版本是什么时候?
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ResultCategoryName asc) peta_rn, 
    peta_query.* 
        From (
                Select em.SysEmailID, [DisplayID], 
                Case When em.SysEmailCategoryID IS NULL Then em.CategoryName Else cat.CategoryName End as 'ResultCategoryName',
                [Name], 
                IsActive, 
                em.ModifiedDateTime, 
                us.Username  
                    FROM [dbo].[SysEmail] em Left JOIN dbo.Users us ON em.CreatedBy = us.UserID  
                        Left JOIN dbo.SysEmailCategory cat on em.SysEmailCategoryID = cat.SysEmailCategoryID 
                            ) as peta_query) peta_paged WHERE peta_rn>0 AND peta_rn<=10
select * from (**your query here**) query order by ResultCategoryName asc