如何计算实体框架中的非原始对象列表?

时间:2011-10-25 01:18:52

标签: c# linq entity-framework-4.1

我需要计算一个对象的数量,然后存储这个数字。

我尝试了以下内容:

var order = db.Questions.Where(x => x.Owner == owner).Count();

失败并显示以下消息:

  

无法创建“MVCApp.Models.Owner”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。

我已将代码修改为以下内容:

var order = db.Questions.Where(x => x.Owner == owner);
int bla = 0;
foreach (var item in order)
{
    bla++;
}

我所做的似乎工作得很好,没有任何缺点(除了需要额外的几行代码),但是,我真的很想了解这个问题及其背后的问题。

Where命令使对象正常,那么,为什么Count不起作用?

有人可以提出任何建议吗?

2 个答案:

答案 0 :(得分:4)

我怀疑owner是一个类的实例,也许是另一个实体?在这种情况下,您可能要做的是检查外键是否与所有者ID相同(或者反过来取决于您设置关系的方式)。如果这是真的,之前它不工作的原因是它不知道如何将对象相等转换为SQL表达式。它需要使用原始类型,其中定义了表达式的转换。

var count = db.Questions.Where( x => x.OwnerID == owner.ID ).Count();

答案 1 :(得分:1)

我相信你应该能够做到这一点,而不是循环:

var bla = db.Questions.Where(x => x.Owner == owner).AsEnumerable().Count();

我不知道为什么你不能使用EF获取Count()个项目但是在这里恢复使用LINQ to Objects应该可以正常工作。