我遇到了一个奇怪的场景,使用“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()
也无法解决问题。
我知道这没什么大不了的,但我很好奇为什么会这样。
答案 0 :(得分:2)
实体框架尝试将完整表达式e => e.property == (string) row[0]
转换为SQL WHERE
语句。它只是不知道要将(string) row[0]
转换成什么SQL表达式。
每个LINQ提供程序只能处理一组特定指令。 EF LINQ提供程序不支持评估数组的索引。它只能使用原语。这就是为什么你必须从lambda之外的数组中提取字符串。