Entity Framework 5 Code First を使用して一連のデータを取得するときに、小さな問題に遭遇しました。これが私のコードです:
var data = context.Customers
.Include("Orders")
.Include("Orders.Items")
.Include("Orders.Items.Article").ToArray();
foreach (var customer in data)
{
customer.Orders = customer.Orders.OrderByDescending(o => o.OrderDate).ToArray();
}
これはうまくいきます(うわー!)。しかし、私はそこから抜け出そうとしてforeach
います.データベースエンジンがデータの処理を担当し続けることを望んでいます。どうすればいいですか?
このタイプの結合を試しました:
var data = from customer
in context.Customers
select new {
customer.Id,
customer.Name,
// customer.Orders below doesn't have an Include() to include order items
Orders = customer.Orders.OrderByDescending(b => b.OrderDate)
};
// Translate anonymous object to actual models
var customers = new List<CustomerModel>();
foreach (var customer in data)
{
customers.Add(new CustomerModel()
{
Id = customer.Id,
Name = customer.Name,
Orders = customer.Orders.ToArray()
});
}
しかし、コメントが言うように、アイテムとそれらのアイテムに属する記事を含める方法customer.Orders
はありません。次に、オブジェクトではなくInclude()
から取得しようとしました。context
customer
Orders = context.Orders.Include("Items").Where(o => o.Id == customer.Id)
Include()
しかし、この方法では使用できない実行時例外が発生します(ネストされたクエリで?):
Method 'System.Data.Entity.Infrastructure.DbQuery`1[MyTests.Models.OrderModel] Include(System.String)' declared on type 'System.Data.Entity.Infrastructure.DbQuery`1[MyTests.Models.OrderModel]' cannot be called with instance of type 'System.Data.Objects.ObjectQuery`1[MyTests.Models.OrdersModel]'
そのような入れ子にすることは可能ですか?
foreach
最初のコード ブロックでa を使用する代わりに、データベースにデータを処理させるにはどうすればよいですか?
前もって感謝します。
JP