通过dbContext访问SQL中生成的新字段值

时间:2015-01-26 16:05:23

标签: sql-server entity-framework dbcontext

我正在使用dbContext并且我正在运行一个相当复杂的SQL查询(只是在下面显示一个简单的示例),所以为了避免必须运行查询两次来获取计数,我正在使用{ {1}}按照此站点上的其他建议返回记录总数。

但是,我无法弄清楚如何访问结果属性:

COUNT AS

在上面的示例中,SQL查询生成额外字段using (var db = new DMSContext()) { string queryString = "select *, COUNT(1) OVER() AS TotalRecords FROM DMSMetas"; var Metas = db.DMSMetas.SqlQuery(queryString).ToList(); for (int i = 0; i <= Metas.Count - 1; i++) { var Item = Metas[i]; if (i == 0) { //Want to do this, but TotalRecords not part of the DMSMeta class. How to access the created column? Console.WriteLine("Total records found: " + Item.TotalRecords); } } } 。当我在Management Studio中运行查询时,结果是预期的。但是,如何通过TotalRecords访问TotalRecords字段?

我还尝试将dbContext字段作为DMSMeta类的一部分包含在内,但SQL查询失败,错误指出TotalRecords字段被指定了两次。我尝试为包含TotalRecords字段的DMSMeta创建一个分部类,但是该值仍然是默认值,并且在查询期间不会更新。

我也尝试了以下内容:

TotalRecords

但这也产生了一个错误。任何帮助将不胜感激 - 我相信我错过了一些明显的东西!我想要的是找出一种方法来访问查询返回的记录总数

1 个答案:

答案 0 :(得分:1)

你必须创建一个新类(不是实体类,而是纯DAO类)DMSMetaWithCount(自解释?)然后

context.Database.SqlQuery<DMSMetaWithCount>("select *, COUNT(1) OVER() AS TotalRecords FROM DMSMetas");

请注意

  • imho,select *总是不好的做法。
  • 您将无法跟踪非实体新班级