使用Linq创建嵌套组和子列表

时间:2017-12-13 21:12:04

标签: vb.net linq

我有一张普通的桌子,我试图创建一个嵌套组。然后我会将其序列化以供我的客户使用。

此网站是用VB.net编写的,我在理解linq vb.net时遇到了问题

Table:
    ╔═══════╦════════╦═══════╦══════╗
    ║ Truck ║ Status ║ Store ║ Stop ║
    ╠═══════╬════════╬═══════╬══════╣
    ║   123 ║ A      ║ NY    ║ A1   ║
    ║   123 ║ A      ║ NY    ║ B1   ║
    ║   123 ║ A      ║ BOS   ║ C1   ║
    ║   456 ║ A      ║ NJ    ║ A1   ║
    ║   456 ║ A      ║ NJ    ║ B1   ║
    ║   222 ║ C      ║ CT    ║ A1   ║
    ║   222 ║ C      ║ CT    ║ B1   ║
    ║   222 ║ C      ║ CT    ║ C1   ║
    ║   222 ║ C      ║ CT    ║ D1   ║
    ╚═══════╩════════╩═══════╩══════╝

我的linq JSON输出应该看起来像

[{"Truck":"123","Status":"A","StoreList":[{"Store":"NY","StopCount":"2"},{"Store":"BOS","StopCount":"1"}],"StopsList":[{"Store":"NY","Stop":"A1"},{"Store":"NY","Stop":"B1"},{"Store":"BOS","Stop":"C1"}]},

{"Truck":"456","Status":"A","StoreList":[{"Store":"NJ","StopCount":"2"}],"StopsList":[{"Store":"NJ","Stop":"A1"},{"Store":"NJ","Stop":"B1"}]},

{"Truck":"222","Status":"C","StoreList":[{"Store":"CT","StopCount":"4"}],"StopsList":[{"Store":"CT","Stop":"A1"},{"Store":"CT","Stop":"B1"},{"Store":"CT","Stop":"C1"},{"Store":"CT","Stop":"D1"}]}
]

我不能确定如何进行子组和子列表,从而能够成为一个常规组。

在C#中,我能够做一个简单组和一个列表

  var query = queryJoin.GroupBy(x => x.Truck)
                .Select(group => new MainTrailerList
                {
                    Truck = group.Key,
                    Status = group.First().Status,
                    StopsList  = group.Select(a => new TrailerPosition {  Store = a.Store, Stop = a.Stop })
                });

            return Json(query, JsonRequestBehavior.AllowGet);

但是对于Vb.net,我需要做嵌套组和2个列表。

1 个答案:

答案 0 :(得分:2)

请注意,您不希望将Stop用作属性名称,因为它是VB中的保留字。我改用了StopDetail。

queryJoin.GroupBy(Function(t) t.Truck) _
    .Select(Function(t) New MainTrailerList With {
        .Truck = t.Key,
        .Status = t.First().Status,
        .StopsList = t.Select(Function(s) new TrailerPosition with {
            .Store = s.Store,
            .StopDetail = s.StopDetail})})