LinQステートメントからエンティティオブジェクトを作成したいが、その列をすべてロードしたくない。Entity Framework - LinQ投影の問題
ORDERSオブジェクトには多くの列がありますが、REFERENCEおよびOPERATION列を取得して、SQL文と結果が小さくなるようにしたいだけです。
これのLINQ文は正常に動作し、負荷のすべての私のオブジェクト属性:スローされたエラーが
var orders = (from order in context.ORDERS
select new ORDERS
{
REFERENCE = order.REFERENCE,
OPERATION = order.OPERATION
});
ある
次の文は失敗したがvar orders = (from order in context.ORDERS
select order);
は私のオブジェクトの2つのプロパティのみをロードするために:
The entity or complex type 'ModelContextName.ORDERS' cannot be constructed in a LINQ to Entities query.
何が問題ですか?このようにオブジェクトを部分的にロードすることは可能ではありませんか?
ご回答いただきありがとうございます。
私はあなたの答えの両方を使用して、今私が持っているので、私はあなたにYakimychとディーンの両方に感謝しなければならないANSWER [OK]を
:
var orders = (from order in context.ORDERS
select new
{
REFERENCE = order.REFERENCE,
OPERATION = order.OPERATION,
})
.AsEnumerable()
.Select(o =>
(ORDERS)new ORDERS
{
REFERENCE = o.REFERENCE,
OPERATION = o.OPERATION
}
).ToList().AsQueryable();
そして、私は私が望む正確に何を取得し、 SQLステートメントは完璧ではありませんが、私は必要な2つの列だけを返します(そして、すべての行 "1"に含まれる別の列を返しますが、私はなぜか分かりません) - 私はこのメソッドでサブオブジェクトを構築しようとしました。それはうまくいく。
OK、これを既に試しましたが、次にこの匿名オブジェクトをエンティティタイプにキャストできますか? – mbp
これをエンティティにマップすることはできません。このためにカスタムオブジェクト(DTO)を作成することはできますが、エンティティを部分的に読み込むことはできません。エンティティを変更して安全にしようとすると、EFはその処理方法を知らないためです。 – Steven