为什么在像FirstOrDefault这样的petapoco中没有LastOrDefault方法?

时间:2016-05-27 07:06:28

标签: c# sql-server asp.net-mvc database petapoco

假设这是我在SQL Server中的表TicketUpdate,其中包含一些数据:

_______________________________
| Id | TicketId | Description |
-------------------------------
| 1  |   5      |   desc1     |
| 2  |   6      |   desc2     |
| 3  |   5      |   desc3     |
| 4  |   5      |   desc4     |
| 5  |   6      |   desc5     |

我想使用TicketId = 5使用Petapoco检索最后一行。

有几种方法可以检索像FirstOrDefault这样的单行,如下所示:

db.FirstOrDefault<TicketUpdate>("select * from TicketUpdate where TicketId = 5");

但是使用此语句,它将返回值为TicketId = 5的第一行,其描述为desc1

我的问题是如何检索LastOrDefault值呢? Petapoco没有这样的方法。

其他信息

暂时我可以通过嵌套查询

来检索TicketId = 5的最后一行
select * 
from TicketUpdate 
where Id = (select MAX(Id) from TicketUpdate where TicketId = 5)

但是有没有方法或更好的方法来查找最后一行,就像我们使用FirstOrDefault方法检索第一行而不嵌套查询一样?

2 个答案:

答案 0 :(得分:3)

如评论中所述,您应该能够先对数据进行排序。 尝试这样的事情:

db.FirstOrDefault<TicketUpdate>("select TOP 1 * from TicketUpdate where TicketId = 5 orderby [Id] desc");

只要Id递增,就应该返回为TicketId == 5添加的最后一项。

答案 1 :(得分:1)

更改您的查询以获取ID为max的最后一条记录。此外,您还需要使用Top 1来获取一条记录。

select Top 1 * from TicketUpdate where TicketId = 5 order by ID desc