0

多分私はこれについて間違った方法で行っています...

OrderテーブルとOrderItemテーブルがあります。linq2sqlで生成されたクラスを使用して新しいOrderを作成します。

次に、さまざまなテーブルを追跡するクエリを使用して、データベースからすべての注文可能なアイテムを取得しようとします。

次に、そのクエリからOrderItemの新しいリストを作成しようとしましたが、オブジェクトを明示的に作成できないことに気づきました。

Explicit construction of entity type OrderItem in query is not allowed.

クエリは次のとおりです。

return (from im in dc.MasterItems
                    join c in dc.Categories
                      on im.CATEGORY equals c.CATEGORY1                      
                    select new OrderItem()
                    {
                        OrderItemId = im.ItemId
                    });

アイデアは、新しい注文が作成されたときにすべての注文可能なアイテムをデータベースに入力し、それらをグリッドに表示して更新することです。私はそのクエリの結果を取得し、で使用しようとしていAddRangeますOrder.OrderItems

linq2sqlを使用してこれを達成するための適切な戦略はありますか?

よろしくお願いします。

4

2 に答える 2

1

L2Sについての私の理解からnew SomeObj() { ... }、結果をまだ列挙していないため、クエリで明示的な構文(つまり)を使用することはできないと思います。つまり、クエリが作成されたばかりなので、これをどのように行う必要がありますか。

SELECT new OrderItem() FROM MasterItems im JOIN Categories c on c.CATEGORY1 = im.CATEGORY

これはあなたがやろうとしていることですが、POCOを返すことができないため機能しません(何らかの方法でOrderItemに参加し、OrderItem.*どこかで実行しない限り)。最終的には、最初にクエリでコレクションを(foreachループで、またはToList()を呼び出して)列挙してから、OrderItemオブジェクトを作成するだけです。

var query = (from im in dc.MasterItems
                    join c in dc.Categories
                      on im.CATEGORY equals c.CATEGORY1                      
                    select new { MasterItem = im, Category = c});
List<OrderItem> returnItems = new List<OrderItem>();
foreach(var item in query)
{
    returnItems.Add(new OrderItem() { OrderItemId = item.MasterItem.ItemId });
}
return returnItems;

また

return (from im in dc.MasterItems
                    join c in dc.Categories
                      on im.CATEGORY equals c.CATEGORY1                      
                    select new { MasterItem = im, Category = c})
    .ToList()
    .Select(tr => new OrderItem() { OrderItemId = tr.MasterItem.ItemId });

それを試してみて、それが役立つかどうか私に知らせてください。

于 2012-05-15T19:33:15.720 に答える
0

そのクラス OrderItem がビジネス ロジックのニーズに役立つが、データベースに保存する必要のないプロパティを含む部分ファイルを作成して、注文クラスを展開します。

public partial class OrderItem 
{
   public int JoinedOrderItemId { get; set; }
   public bool HasBeenProcessed { get; set; }

}
于 2012-05-15T19:02:32.893 に答える