2

我在“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()也没有解决问题。

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

4

1 回答 1

2

Entity Framework 尝试将完整的表达式e => e.property == (string) row[0]转换为 SQLWHERE语句。它只是不知道要翻译(string) row[0]成什么 SQL 表达式。

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

于 2012-12-18T14:21:45.810 回答