Linq 与实体框架错误 - 无法创建类型的常量值
本文关键字:类型 创建 常量 实体 框架 错误 Linq | 更新日期: 2023-09-27 18:36:41
我收到以下错误:异常详细信息:系统。不支持异常:无法创建类型为"文件组合"的常量值。在此上下文中仅支持基元类型或枚举类型
我正在使用以下代码:
var o1 = new FileCombined (){ ScholarshipID = 3, FileDescription = "smt" };
var o2 = new FileCombined() { ScholarshipID = 10, FileDescription = "smt" };
List <FileCombined> list = new FileCombined[] { o1, o2 }.ToList();
var data = (from scholarship in db.ScholarshipRequests
join file in list on scholarship.ScholarshipRequestID equals file.ScholarshipID
select new { ScholarshipID = scholarship.ScholarshipRequestID, FileDescription = file.FileDescription }).ToList();
如果我更改 linq 表达式的顺序,查询工作正常:
var o1 = new FileCombined (){ ScholarshipID = 3, FileDescription = "smt" };
var o2 = new FileCombined() { ScholarshipID = 10, FileDescription = "smt" };
List <FileCombined> list = new FileCombined[] { o1, o2 }.ToList();
var data = (from file in list
join scholarship in db.ScholarshipRequests on file.ScholarshipID equals scholarship.ScholarshipRequestID
select new FileCombined (){ ScholarshipID = scholarship.ScholarshipRequestID, FileDescription = file.FileDescription }).ToList();
任何人都可以解释或找到解决方案吗?我需要第一个查询才能工作,因为我在连续代码中有更复杂的查询
为了补充@Maarten的答案,我会说你也可以删除连接并使用Contains
,因为在你的情况下你会得到相同的结果(我想list
不会变得很大)。然后,您可以在列表中查找FileDescription
(我可能会创建字典)。
var list2 = list.Select(x => x.ScholarshipID);
var data = (from scholarship in db.ScholarshipRequests
where list2.Contains(scholarship.ScholarshipRequestID)
select new { ScholarshipID = scholarship.ScholarshipRequestID }).ToList();
// do the lookup in "list" and get result
假设list
是内存中的变量,并且db.ScholarshipRequests
是上下文中的表,这确实是不可能的。不能期望 EF 创建将数据库表与内存中集合联接的查询。
但请注意,这会将整个表加载到内存中,这可能会/将导致性能问题。
像这样(我在db.ScholarshipRequests
之后添加了.ToList()
):
var data = (from scholarship in db.ScholarshipRequests.ToList()
join file in list on scholarship.ScholarshipRequestID equals file.ScholarshipID
select new { ScholarshipID = scholarship.ScholarshipRequestID, FileDescription = file.FileDescription }).ToList();