Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 未为类型';定义大于的二进制运算符;System.Collections.Generic.IEnumerable';_C#_Entity Framework_Linq - Fatal编程技术网

C# 未为类型';定义大于的二进制运算符;System.Collections.Generic.IEnumerable';

C# 未为类型';定义大于的二进制运算符;System.Collections.Generic.IEnumerable';,c#,entity-framework,linq,C#,Entity Framework,Linq,下面的代码抛出大于未为类型“System.Collections.Generic.IEnumerable”定义的二进制运算符错误,尽管s.Assessments与前面的代码相比为空。但是,我不明白为什么即使我使用s.Assessments==null进行控制,二进制运算符也是可访问的。另外,为什么它会生成要与之比较的System.Collections.Generic.IEnumerable?有什么想法吗 baseQuery = baseQuery.Where(s => s.Asses

下面的代码抛出
大于未为类型“System.Collections.Generic.IEnumerable”定义的二进制运算符
错误,尽管
s.Assessments
与前面的代码相比为空。但是,我不明白为什么即使我使用
s.Assessments==null
进行控制,二进制运算符也是可访问的。另外,为什么它会生成要与之比较的
System.Collections.Generic.IEnumerable
?有什么想法吗

  baseQuery = baseQuery.Where(s => s.Assessments == null ? false : s.Assessments
                                    .SelectMany(a => a.AssessmentItems)
                                    .Where(ai => ai.RubricItemId == rubricItemId)
                                    .DefaultIfEmpty()
                                    .Average(d => d == null ? 0 : d.CurrentScore) > averageScore.GetValueOrDefault());

当归结为SQL时,评估值将不为null,而是为空。对于Linq2EF,通常最好将条件/默认值移到表达式之外,然后让EF处理值。拥有函数和此类内部表达式的风险在于,EF可能无法解析它们并引发错误,或导致对对象执行查询

decimal average = averageScore.GetValueOrDefault();

baseQuery = baseQuery.Where(s => s.Assessments
    .SelectMany(a => a.AssessmentItems)
    .Where(ai => ai.RubricItemId == rubricItemId)
    .Average(d => d.CurrentScore) > average);

您不应该需要所有DefaultIfEmpty和null检查。EF将处理不存在记录的情况。如果查询没有评估,则该元素将不返回或分解成平均分数检查。

为什么人们会考虑这个偏离主题并要求关闭它?<代码> BaseReals>代码类型,特别是它的<代码>评估< /代码>属性?平均分数如何?这个错误是真的抛出的还是在编译时确定的?谢谢你的回答!在这种情况下,抛出的
序列不包含任何元素
错误。只有当我有
s.Assessments.SelectMany(a=>a.AssessmentItems)。Any(ai=>ai.RubricItemId==RubricItemId)时它才有效?错误:s.评估…
检查。