首页 > 解决方案 > 有人可以解释为什么这个 LINQ-to-entitiy 查询会导致错误,以及为什么我的解决方案会修复它吗?

问题描述

抛出的表达式是:

System.NotSupportedException:'无法创建'CantShowYouThis'类型的常量值。在此上下文中仅支持原始类型或枚举类型。

导致错误的查询

context.tableA.RemoveRange(context.tableA.Where(conflict => listOfCantShowYouThis.Select(r => 
r.Id).Contains(conflict.RequestId)));

解决方案:

var list = listOfCantShowYouThis.Select(r => r.Id);
context.tableA.RemoveRange(context.tableA.Where(conflict => list.Contains(conflict.RequestId)));

这段代码取自我正在使用的代码库,所以我不得不删除类的名称等,以保持安全。

通过谷歌搜索,我认为这与 EF / LINQ-to-entity 不喜欢的内存数据和数据库数据的混合有关。我可能错了,但即使我没有错,对正在发生的事情的理解仍然很肤浅。我想了解为什么我的修复有效。我知道,在实际使用之前(通过调用 ToList() 或其他方法),执行 Select 并不会真正做太多事情,因为延迟执行,所以对我来说很奇怪,像这样移动它可以解决问题。

标签: c#entity-frameworklinqlinq-to-entities

解决方案


推荐阅读