如何计算 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<T>
实现了IQueryable<T>
,所以不能简单的使用扩展方法:
int count = oQuery.Count();
如果你执行这个会发生什么?我本来希望整个查询只做一个 Count()...(并不是说我做了很多 EF...)。
【讨论】:
这对我有用,但我有一段时间公开 Count() 方法。如果有人遇到 ObjectQuery.Count() 不可用的情况,请不要忘记在类中包含使用 System.Linq。这让我停留了一段时间,因为我之前删除了未使用的 using 语句,并且我的 ObjectQuery 对象的 Intellisense 选项是可用的子集。【参考方案2】:ObjectQuery
你从中得到了什么?
int count = oQuery.Count();
【讨论】:
请注意,Enumerable.Count() 将强制加载数据;你需要 Queryable.Count() 来获得可组合的行为。【参考方案3】:如果计数小于 1,那么它找到了一条新记录,如果没有,它已经有该记录。
【讨论】:
以上是关于如何计算 ObjectQuery<T> 将返回多少个对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 ObjectQuery 与由 OR 子句分隔的 Where 过滤器一起使用