如何计算 ObjectQuery<T> 将返回多少个对象?

Posted

技术标签:

【中文标题】如何计算 ObjectQuery<T> 将返回多少个对象?【英文标题】:How to count how many objects will be returned by an ObjectQuery<T>? 【发布时间】:2010-09-18 07:22:12 【问题描述】:

我正在构建这样的 ObjectQuery:

        string query = "select value obj from Entities.Class as obj " +
                       "where obj.Property = @Value";

        ObjectQuery<Class> oQuery = new ObjectQuery<Class>(query, EntityContext.Instance);
        oQuery.Parameters.Add(new ObjectParameter("Value", someVariable));

我现在可以将此对象分配为控件的 DataSource,或者使用 foreach 循环进行迭代,甚至强制实现到 List,但是,我可以计算将返回的对象的数量,而无需强制实现?

我是否需要创建一个伴随查询来执行 count() 或者是否有一个函数可以在某个地方为我执行此操作?

谢谢。

【问题讨论】:

【参考方案1】:

ObjectQuery&lt;T&gt;实现了IQueryable&lt;T&gt;,所以不能简单的使用扩展方法:

int count = oQuery.Count();

如果你执行这个会发生什么?我本来希望整个查询只做一个 Count()...(并不是说我做了很多 EF...)。

【讨论】:

这对我有用,但我有一段时间公开 Count() 方法。如果有人遇到 ObjectQuery.Count() 不可用的情况,请不要忘记在类中包含使用 System.Linq。这让我停留了一段时间,因为我之前删除了未使用的 using 语句,并且我的 ObjectQuery 对象的 Intellisense 选项是可用的子集。【参考方案2】:

ObjectQuery 类实现了支持 Count() 方法的 IEnumerable 接口。

你从中得到了什么?

int count = oQuery.Count();

【讨论】:

请注意,Enumerable.Count() 强制加载数据;你需要 Queryable.Count() 来获得可组合的行为。【参考方案3】:

如果计数小于 1,那么它找到了一条新记录,如果没有,它已经有该记录。

【讨论】:

以上是关于如何计算 ObjectQuery<T> 将返回多少个对象?的主要内容,如果未能解决你的问题,请参考以下文章

获取EF查询的SQL语句

如何将 ObjectQuery 与由 OR 子句分隔的 Where 过滤器一起使用

ObjectQuery查询及方法

ObjectQuery查询及方法

更新对象时键入 ObjectQuery 或 DbQuery 错误

如何计算R中的双重积分