实体框架 SQL 查询

Posted

技术标签:

【中文标题】实体框架 SQL 查询【英文标题】:Entity FrameWork SQL Query 【发布时间】:2013-07-01 07:39:44 【问题描述】:

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

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();

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

【问题讨论】:

【参考方案1】:

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

你为什么坚持使用 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();

【讨论】:

@user2254395 - “得到错误”没有帮助。由于我无法访问您的实际源代码,因此我无法知道对象及其属性的真实名称。您必须弄清楚这一点,因为您可以访问代码。

以上是关于实体框架 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

来自 sql 查询执行实体框架的匿名类型结果

实体框架 SQL 查询

为啥使用参数化查询或实体框架会阻止 sql 注入?

原始 SQL 查询和实体框架核心

实体框架查询性能与原始 SQL 执行不同

如何使用实体框架和 linq 编写此 sql 查询