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;
}
このコードは次の例外をスローします。The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
x
ただし、 の代わりにを供給するとaa[i]
機能します。
なぜ?
ベストアンサー1
これを修正するには、一時変数を使用します。
var tmp = aa[i];
...
m => m.PresId == tmp
where句には
m => m.PresId == aa[i]
これはラムダ式を表現する方法です。これが式に変換され、データベースのクエリに変換されると、aa[i]
配列のインデックスである が見つかります。つまり、定数として扱わないインデクサーをデータベース言語に翻訳することは不可能なので、エラーが発生します。