Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算实体框架中的非基本对象列表?_C#_Linq_Entity Framework 4.1 - Fatal编程技术网

C# 如何计算实体框架中的非基本对象列表?

C# 如何计算实体框架中的非基本对象列表?,c#,linq,entity-framework-4.1,C#,Linq,Entity Framework 4.1,我需要计算一个对象有多少个,然后存储这个数字 我尝试了以下方法: var order = db.Questions.Where(x => x.Owner == owner).Count(); var order = db.Questions.Where(x => x.Owner == owner); int bla = 0; foreach (var item in order) { bla++; } 它将失败,并显示以下消息: 无法创建“MVCApp.Models.Ow

我需要计算一个对象有多少个,然后存储这个数字

我尝试了以下方法:

var order = db.Questions.Where(x => x.Owner == owner).Count();
var order = db.Questions.Where(x => x.Owner == owner);
int bla = 0;
foreach (var item in order)
{
    bla++;
}
它将失败,并显示以下消息:

无法创建“MVCApp.Models.Owner”类型的常量值。在此上下文中仅支持基本类型“如Int32、String和Guid”

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

var order = db.Questions.Where(x => x.Owner == owner).Count();
var order = db.Questions.Where(x => x.Owner == owner);
int bla = 0;
foreach (var item in order)
{
    bla++;
}
我所做的似乎工作得很好,除了需要额外的几行代码外,没有任何负面影响,但是,我真的很想了解这个问题及其背后的问题

Where命令可以很好地处理对象,那么,为什么计数不起作用呢


有人能提出什么建议吗?

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

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

我不知道为什么您无法使用EF获取项目数,但在此处使用LINQ恢复到对象应该可以正常工作。

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

var bla = db.Questions.Where(x => x.Owner == owner).AsEnumerable().Count();
我不知道为什么您不能使用EF获取项目数,但是在这里使用LINQ恢复到对象应该可以正常工作。

我怀疑所有者是一个类的实例,或者是另一个实体?。在这种情况下,您可能要做的是检查外键是否与所有者id相同,或者是否与所有者id相同,这取决于您如何设置关系。如果这是真的,那么它以前不工作的原因是它不知道如何将对象相等转换为SQL表达式。它需要使用定义表达式翻译的基元类型

var count = db.Questions.Where( x => x.OwnerID == owner.ID ).Count();
我怀疑所有者是一个类的实例,也许是另一个实体?。在这种情况下,您可能要做的是检查外键是否与所有者id相同,或者是否与所有者id相同,这取决于您如何设置关系。如果这是真的,那么它以前不工作的原因是它不知道如何将对象相等转换为SQL表达式。它需要使用定义表达式翻译的基元类型

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

请纠正标签和问题,如果你觉得它是错误的。。。我不确定这是否是一个实体框架问题或与Linq查询直接相关:/n请更正标记和问题,如果您认为这是错误的。。。我不确定这是实体框架问题还是与Linq查询直接相关:/您需要具体化此方法的所有问题-这将非常低效是的,不幸的是,但至少比循环更有效。虽然看起来tvanfosson的解决方案会是更好的选择。你需要具体化这种方法的所有问题-这将是非常低效的是,不幸的是,但至少比循环更有效。虽然看起来tvanfosson的解决方案会是更好的选择,但我现在觉得自己有点像个白痴——看来我的foreach循环实际上并没有像预期的那样工作。我将其更改为x.owner.id==owner.id-现在它似乎可以很好地处理计数。。。我不得不问,这是一只虫子吗?单一选择似乎可以很好地处理复杂类型,而且,考虑到这应该只是一个常规比较谓词,我真的无法理解为什么它更复杂。。。无论如何,非常感谢你的回答+1/回答我现在觉得自己有点傻了——看来我的foreach循环实际上并没有像预期的那样工作。我将其更改为x.owner.id==owner.id-现在它似乎可以很好地处理计数。。。我不得不问,这是一只虫子吗?单一选择似乎可以很好地处理复杂类型,而且,考虑到这应该只是一个常规比较谓词,我真的无法理解为什么它更复杂。。。无论如何,非常感谢你的回答+1/答复