C# PetaPoco分页查询生成改进
我是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
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