2

我收到以下错误:异常详细信息:System.NotSupportedException:无法创建“FileCombined”类型的常量值。此上下文仅支持原始类型或枚举类型

我正在使用以下代码:

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();

谁能解释或找到解决方案?我需要第一个查询才能工作,因为我在连续代码中有更复杂的查询

4

2 回答 2

2

要添加到@Maarten 的答案,我想说您也可以删除 join 和 use 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
于 2013-10-23T12:21:38.030 回答
1

假设list是内存中的变量,并且db.ScholarshipRequests是上下文中的表,这确实是不可能的。您不能期望 EF 创建一个将数据库表与内存中集合连接起来的查询。

您可以将表加载到内存中,但请注意,这会将整个表加载到内存中,这可能/将会导致性能问题。

像这样(我在.ToList()之后添加db.ScholarshipRequests):

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();
于 2013-10-23T08:47:27.180 回答