Here我学会了如何计算相关实体而不加载它们。问题是我在编译时没有实体类型。我的情况:
var postCount = context.Entry(someObject) // someObject received from somewhere
.Collection(somePropertyString)
.Query() // and here I got a non-generic IQueryable
.Count(); // which has no Count method
如果我试图.Query().Cast<object>().Count()
我在此行获得运行时异常:
发生System.NotSupportedException HResult = -2146233067
消息=无法转换类型&#39; ...&#39;输入 &#39; System.Object的&#39 ;. LINQ to Entities仅支持转换EDM原语 或枚举类型。源=的EntityFramework
那么,如果我在编译时没有实体类型,如何计算相关实体而不加载它们?
答案 0 :(得分:1)
使用反射是一种选择。这种扩展方法帮助了我:
public static int Count(this IQueryable q)
{
return (int)q.Provider.Execute(
Expression.Call(typeof(Queryable),
"Count",
new[] { q.ElementType },
new[] { q.Expression }));
}
答案 1 :(得分:0)
你也可以写:
int count = context.Blogs.Single(blog=> blog.Id = yourCriteriaId).Posts.Count();
这也不会加载对象。
它会产生一些像这样的SQL语句(简化):
Select Count(*) from Post where Post.BlogID = 3