LINQ 式ノード タイプ 'ArrayIndex' は LINQ to Entities ではサポートされていません。質問する

LINQ 式ノード タイプ 'ArrayIndex' は LINQ to Entities ではサポートされていません。質問する
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]配列のインデックスである が見つかります。つまり、定数として扱わないインデクサーをデータベース言語に翻訳することは不可能なので、エラーが発生します。

おすすめ記事