实体框架由string []引起的异常

时间:2012-12-18 14:16:42

标签: asp.net-mvc entity-framework

我遇到了一个奇怪的场景,使用“Where”中的实体框架,我可以搜索字符串,但不是字符串,它是数组的一部分:

这有效:

string line = sr.ReadLine();
string[] row = line.Split(';');
string code = row[0];
TableObject to = db.TableObject.Where(e => e.property == code).FirstOrDefault();

但是,如果我尝试通过省略步骤字符串code = row[0]并执行以下操作来简化代码:

string line = sr.ReadLine();
string[] row = line.Split(';');
TableObject to = db.TableObject.Where(e => e.property == (string) row[0]).FirstOrDefault();

我得到以下异常:

System.NotSupportedException: The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.

我发现,由于我已经特定地将row[0]数组转换为(string),因此该例子正在抱怨数组看到。

.ToString()也无法解决问题。

我知道这没什么大不了的,但我很好奇为什么会这样。

1 个答案:

答案 0 :(得分:2)

实体框架尝试将完整表达式e => e.property == (string) row[0]转换为SQL WHERE语句。它只是不知道要将(string) row[0]转换成什么SQL表达式。

每个LINQ提供程序只能处理一组特定指令。 EF LINQ提供程序不支持评估数组的索引。它只能使用原语。这就是为什么你必须从lambda之外的数组中提取字符串。