4

エンティティ フレームワークをデータベースに対してチェックして返す必要がある値のローカル リストがあります。

リストがすでにデータベースにある場合は、次のように動作します。

var list = /* some ef query */;
var myList = context.Logs.Where(l => list.Any(li => l.LogNumber == li.LogNumber));

ただし、リストがローカルの場合は、エラーがスローされます。

var list = new List<Log>();
var myList = context.Logs.Where(l => list.Any(li => l.LogNumber == li.LogNumber));

例外:Unable to process the type 'Data.Log[]', because it has no known mapping to the value layer.

では、EF を使用してローカル リストとデータベース リストを照合するにはどうすればよいでしょうか。

4

1 に答える 1

4

コードサンプルであなたとは異なるエラーが発生しましたが、同じ考えだと思います。List<Log>EF は、SQL ストア式に変換する方法を知りません。まだシリアル化されていないため、まだクエリを実行しているときに機能します。

これは理想的とは言えませんが、LogNumber のスカラー値を抽出し、それをクエリで使用することで、このクエリを機能させることができました。

    var list = new List<Log>();
    list.Add(new Log()
       {
           LogNumber = 1
       });
    var numbers = list.Select(l => l.LogNumber);
    var myList = m.Logs.Where(l => numbers.Contains(l.LogNumber));
于 2012-09-12T18:53:54.427 に答える