0

如何从以下查询中获取总行数和记录?

Contracts cont = db.contracts.SqlQuery("SELECT TOP (20) * 
  FROM (SELECT 
            ROW_NUMBER() OVER (ORDER BY dbo.Contracts.expDate desc) As RowID, 
            dbo.Contracts.*, 
            TotalRows=COUNT(*) OVER() 
        FROM dbo.Contracts  
        Where dbo.Contracts.cancelled = 1) as temp 
  WHERE temp.RowID >" + 20).ToList();

我正在获取记录,但不知道如何获取总行数。任何机构都可以建议从上述查询中获取总行数和记录的最佳方法吗?

4

1 回答 1

2

您的代码将不起作用,因为您要返回合同列表和计数,但您试图将其仅分配给合同。您需要投影到一个匿名类型,或者创建一个自定义类型来投影,其中包括合同的计数和集合。

为什么坚持使用sql查询?这应该做同样的事情。

var contracts = (from x in db.contacts where x.cancelled == 1 
                 orderby x.expDate descending 
                 select new { Count=x.Count(), Records=x.Skip(20).Take(20) }).ToList();

除非您想要没有 where 子句的总行数,否则它将是:

var contracts = (from x in db.contacts orderby x.expDate descending 
                 select new { Count=x.Count(), 
                   Records=x.Where(y => y.canceled == 1).Skip(20).Take(20) }).ToList();
于 2013-07-01T07:51:49.253 回答