私は苦労して、これらの概念に頭を悩ませようとしてきました。どんな助けでも大歓迎です。1 つのテーブルに Orders のコレクションがある場合、それを繰り返し処理し、他のテーブルに対してクエリを実行する最良の方法は何ですか。
このループは私が望んでいることを実行しますが、これがどのようにパフォーマンスの問題を引き起こすかを教えてもらいました。他の投稿で、ループの外側でデータベースを照会するのが最適な場所を読みました。
foreach (var item in myOrders)
{
var lookUpValues=(from f in ORDERS
where f.ORDERS ==item.ORDER_ID
&& f.ORDERS_SUFFIX==item.LINE
select f.Something);
}
反復する前に Order テーブル全体をプルダウンするのではなく、次のようなことを試しましたが、ご覧のとおり、正確な行が返されません。
var orderIds=myOrders.Select (x =>x.ORDER_ID).Distinct().ToList();
var lineIds=myOrders.Select (x =>x.LINE).Distinct().ToList();
var query=(from f in ORDERS
where orderIds.Contains(f.ORDERS)
&& lineIds.Contains(f.ORDERS_SUFFIX)
select f).ToList();
以下は、私が必要だと思うことを行います。反復処理が必要な正しい Orders が返されます。ただし、メモリオブジェクトとエンティティを一緒にクエリできないため、エラーがスローされます。
var ordersAndLine=(from f in myOrders select new{sId=f.ORDER_ID,line=f.LINE}).ToList();
var query=(from f in ORDERS
from s in ordersAndLine
where s.sId==f.ORDERS
&& s.line==f.ORDERS_SUFFIX
select f).ToList();
NotSupportedException: '匿名型' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。
私の質問が理にかなっていることを本当に願っています。状況を正しく説明していない場合は、事前にお詫び申し上げます。私が行っていることは、テーブルの大部分をメモリに引き下げて反復処理を行うことですが、これがパフォーマンスの問題を引き起こすのではないかと心配しており、結果のクエリをフィルター処理するより良い方法があるかどうかを確認したいと考えていました。