4

VB.NETの下で LINQ クエリで Group Joins を使用する方法を理解しようとしています。何らかの理由で、構文で見つけたように見えるすべての例は、単純に間違っています! 少なくとも、それは私のコンパイラが私に言い続けていることです。ここで私が間違っているのは正確には何ですか?

これは、注文を注文アイテムに結合して、orderId によってグループ化された注文アイテムのコレクションを含むタイプになるようにする簡単な例です。

Dim groupedOrders = (From o In orders
                     Group Join i In orderItems On o.OrderId Equals a.OrderId Into myOrders
                     Select o.OrderId, myOrders).ToList()

この例で現在実行しているのは、作成している「myOrders」グループで次のエラーが発生することです。

メソッド 'myOrders' の定義は、このコンテキストではアクセスできません。

4

3 に答える 3

5

VB では、Into エイリアスは myOrders ではなく「Group」である必要があります。Northwind を使用すると、次のようにクエリを記述できます。

Dim groupedOrders = 
   From o On Orders
   Group Join od in Order_Details On o.OrderID Equals od.OrderID Into Group
   Select o.OrderID, Details = Group

グループに別の別名を付けたい場合は、次を使用できます。

Dim groupedOrders = 
   From o On Orders
   Group Join od in Order_Details On o.OrderID Equals od.OrderID Into GroupedDetails = Group
   Select o.OrderID, GroupedDetails

そうは言っても、orders と orderItems がデータベース プロバイダーからのものである場合は、自然な関連付けを使用するだけで、結合はまったく必要ありません。

Dim groupedOrders = 
   From o In Orders
   Select o.OrderID, Details = o.Order_Details

また、外部キーのみでグループ化する必要がある場合は、親テーブルは必要ありません。

Dim groupedOrders = 
   From od In Order_Details
   Group od By Key = od.OrderID Into Group
   select Key, Group
于 2011-10-18T18:10:02.630 に答える
3

あなたは近くにいます。myOrdersとして指定するだけですGroup

Dim groupedOrders = (From o In orders
                     Group Join i In orderItems On o.OrderId Equals a.OrderId
                     Into myOrders = Group
                     Select o.OrderId, myOrders).ToList()

Countこの MSDN ページから、グループの を取得する方法を含む同様の例を見ることができます: Introduction to LINQ in Visual Basic

于 2011-10-18T18:04:58.967 に答える