c# - 有人可以解释为什么这个 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# - 检查 TopicClient 是否可以正常工作
- php - MYSQL 更新记录时出错:无法重新打开表(临时表)
- ajax - MVC Html.BeginForm 和页面重新加载
- excel - 日期函数第一次返回 00/01/1900
- mongodb - 如何避免 SyntaxError: missing : after property id @(shell):1:36 on mongoDb?
- python-3.x - 在 plt.colorbar (matplotlib) 上为定义的值添加特定颜色
- python-3.x - 变量值变化时触发动作(连续运行)
- jquery - jquery 和 winhttp msxml2 请求
- xml - Xpath 返回值列表
- asp.net - ASP.Net Core 2 authentication write cookie to localhost different port