顶级百分比的LINQ版本

顶级百分比的LINQ版本,linq,linq-to-sql,Linq,Linq To Sql,有没有一种方法可以使用百分比执行top(Take)linq查询?T-SQL应该是: SELECT TOP 20 PERCENT ... 但是LINQ似乎只想要一个int 看来我得先数一数,然后再拍一张。有什么建议吗?基本上,您必须执行两次查询。您必须执行一次以获得计数,然后再次计算百分比(因为您将传递与计数对应的数字,该数字将等于20%)。我认为LINQ to SQL中没有内置任何内容。您可以使用存储过程来完成。我不太喜欢这样,除非你碰巧正在使用一个过程,但它可能比使用两个单独的查询要好。这就

有没有一种方法可以使用百分比执行top(Take)linq查询?T-SQL应该是:

SELECT TOP 20 PERCENT ...
但是LINQ似乎只想要一个int


看来我得先数一数,然后再拍一张。有什么建议吗?

基本上,您必须执行两次查询。您必须执行一次以获得计数,然后再次计算百分比(因为您将传递与计数对应的数字,该数字将等于20%)。

我认为LINQ to SQL中没有内置任何内容。您可以使用存储过程来完成。我不太喜欢这样,除非你碰巧正在使用一个过程,但它可能比使用两个单独的查询要好。

这就是我正在做的,我不喜欢它:/应该有一个方法可以转换为本机SQL。@Basallo:不幸的是,我不相信有。您^可以^以某种方式扩展IQueryable实现,以支持您自己对Top的重写,然后将其转换为相应的SQL Server命令。@tony:注意,尽管它有两次跳闸,但并不像看上去那么糟糕。query.Count()作为SELECT Count()执行,因此至少它不会返回所有行、计数,然后再次选择all。正如其他人所说,存储的过程和视图将是另一种方式…@Daniel:问题是,您仍然在执行两次查询。如果你真的想用正确的方法来做,你应该重写IQueryable实现来支持一个Top方法(可能名为TopPercentage)来执行这项工作。视图可能更合适。