LINQ to Entities不支持LINQexpression式节点types“ArrayIndex”
public List<string> GetpathsById(List<long> id) { long[] aa = id.ToArray(); long x; List<string> paths = new List<string>(); for (int i = 0; i < id.Count; i++) { x = id[i]; Presentation press = context.Presentations.Where(m => m.PresId == aa[i]).FirstOrDefault(); paths.Add(press.FilePath); } return paths; }
在这个代码中我有一个exachtion: The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
买时,我而不是一个[我]我使用X它正在工作。
为什么?
要解决此问题,请使用临时variables:
var tmp = aa[i]; ... m => m.PresId == tmp
在你的where子句中
m => m.PresId == aa[i]
这是一种expressionlambdaexpression式的方式。 当它被转换成一个expression式,然后转换成你的数据库的查询,它会发现aa[i]
,这是一个数组的索引。 即它不把它当作一个常量 。 由于将索引器转换为数据库语言是不可能的,因此会导致错误。
显然,如果在expression式树中使用array index (aa[i])
,它也会尝试将其转换为expression式。
只需要使用一个单独的variables来解决它:
int presId = aa[i]; Presentation press = context.Presentations.Where(m => m.PresId == presId).FirstOrDefault();
public List<string> GetpathsById(List<long> id) { long[] aa = id.ToArray(); long x; List<string> paths = new List<string>(); for (int i = 0; i < id.Count; i++) { x = id[i]; int temp = aa[i]; Presentation press = context.Presentations.Where(m => m.PresId == temp).FirstOrDefault(); paths.Add(press.FilePath); } return paths; }
尝试这个
它不能映射到SQLtypes或函数。
你知道你正在混合你的列表和数组。 你想在这个代码中做的任何事情都可以简单地使用列表来完成。
下面的代码将完成你所需要的一切。
public List<string> GetpathsById(List<long> id) { long x; List<string> paths = new List<string>(); foreach(long aa in id) { Presentation press = context.Presentations.Where(m => m.PresId == aa).FirstOrDefault(); paths.Add(press.FilePath); } return paths; }
public List<string> GetpathsById(List<long> id) { long x; List<string> paths = new List<string>(); foreach(long aa in id) { Presentation press = context.Presentations.Where(m => m.PresId == aa).FirstOrDefault(); paths.Add(press.FilePath); } return paths; }
至
public IEnumerable<String> GetpathsById(List<long> id) { foreach(long item in id) yield return = (context.Presentations.Where(m => m.PresId == item).FirstOrDefault()).FilePath }
“短风格”,但不build议,如果你写了很多其他function。