私はこのような構造コレクションを持っています:
Jet Owner Item Comp
AAAA AAAA 101 2210
AAAA AAAA 202 2220
AAAA AAAA 301 5550
AAAA AAAA 301 5560
AAAA 2210 101 6789
AAAA 2220 202 ABABA
AAAA 5550 301 XXXX0
AAAA 5550 301 XXXX1
AAAA 5560 301 YYYY0
AAAA 5560 301 6612
AAAA 6789 101 ZZZZZ.0
AAAA 6789 101 ZZZZZ.1
AAAA 6789 101 ZZZZZ.2
AAAA 6789 101 ZZZZZ.3
AAAA ABABA 202 TTTTT.0
AAAA ABABA 202 TTTTT.1
AAAA ABABA 202 TTTTT.2
AAAA 6612 301 ZZZZZ.0
AAAA 6612 301 ZZZZZ.1
AAAA 6612 301 ZZZZZ.2
AAAA 6612 301 ZZZZZ.3
AAAB ... ... .....
次のような結果になるように注文する必要があります。
Jet Owner Item Comp
AAAA AAAA 101 2210
AAAA 2210 101 6789
AAAA 6789 101 ZZZZZ.0
AAAA 6789 101 ZZZZZ.1
AAAA 6789 101 ZZZZZ.2
AAAA 6789 101 ZZZZZ.3
AAAA AAAA 202 2220
AAAA 2220 202 ABABA
AAAA ABABA 202 TTTTT.0
AAAA ABABA 202 TTTTT.1
AAAA ABABA 202 TTTTT.2
AAAA AAAA 301 5550
AAAA 5550 301 XXXX0
AAAA 5550 301 XXXX1
AAAA AAAA 301 5560
AAAA 5560 301 YYYY0
AAAA 5560 301 6612
AAAA 6612 301 ZZZZZ.0
AAAA 6612 301 ZZZZZ.1
AAAA 6612 301 ZZZZZ.2
AAAA 6612 301 ZZZZZ.3
AAAB ... ... .....
Jetで注文したいのですが、コンプで所有者の中にあるものを見つけたら、関連するコンポーネントの主な所有者の後に行を入力し、所有者で注文し、最後にアイテムで注文します。C#linqクエリで結果を作成しましたが、VB.NETlinqクエリでも同じ結果を得る必要があります。C#Linqクエリは次のとおりです。
var orderedData =(from d in collection
group d by d.Jet into g
orderby g.Key
from d in g
select new[] {d}.Union(g.Where(c => c.Owner == d.Comp)) into withChildren
from wc in withChildren
orderby wc.Item
select wc).Distinct();
VB.NETでこれを試しましたが、機能しません。
Dim orderedData = (From d In collection
Group d By d.Jet Into Group
Order By Group
From d In Group
Select New withChildren With {d}.Union(gr.Where(Function(c) c.Owner = d.Comp)))
from wc in withChildren
Order By wc.pos
Select wc).Distinct
from wc in withChildren
Order By wc.pos
Select wc).Distinct