使用LINQ格式IEnumerable(VB.NET)

问题描述 投票:-1回答:1

我正在尝试修复我的数据以便能够正常显示。

一世

预期产出

Manager: Jane Lynch | Start Date: 01-01-2015 | End Date: 01-01-2020
-------------------------------------------------------------------
| Employee: James Pierce
| Employee: Jesse Mats
| Employee: Anna Boxes
Manager: Rob Riggle | Start Date: 05-10-2016 | End Date: 04-01-2022
-------------------------------------------------------------------
| Employee: Paul Rudd
| Employee: Mike Judge

当前数据输出

Manager: Jane Lynch | Start Date:  | End Date: 
-------------------------------------------------------------------
| Employee: James Pierce
| Employee: Jesse Mats
| Employee: Anna Boxes
Manager: Rob Riggle | Start Date:  | End Date: 
-------------------------------------------------------------------
| Employee: Paul Rudd
| Employee: Mike Judge

代码结构

Imports System
Imports System.Data.DataSetExtensions
Imports System.Data
Imports System.Collections.Generic
Imports System.Linq

Public Module Module1

    Public Sub Main()
        Dim employees As List(Of Employee) = New List(Of Employee)()
    employees.Add(New Employee With {.ID = "1", .FullName = "Jane Lynch", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = ""})
    employees.Add(New Employee With {.ID = "2", .FullName = "James Pierce", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Jane Lynch"})
    employees.Add(New Employee With {.ID = "3", .FullName = "Jesse Mats", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Jane Lynch"})
    employees.Add(New Employee With {.ID = "4", .FullName = "Anna Boxes", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Jane Lynch"})
    employees.Add(New Employee With {.ID = "5", .FullName = "Rob Riggle", .StartDate = New DateTime(2016, 5, 10), .EndDate = New DateTime(2022, 4, 1), .Manager = ""})
    employees.Add(New Employee With {.ID = "6", .FullName = "Paul Rudd", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Rob Riggle"})
    employees.Add(New Employee With {.ID = "7", .FullName = "Mike Judge", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Rob Riggle"})
    Dim groupedEmployees As List(Of EmpGroup) =(From emp As Employee In employees Group By manager = emp.Manager Into g = Group Select New EmpGroup With {.Manager = manager, .employees = g}).ToList


    For Each emp In groupedEmployees
        If emp.Manager <> "" Then
            Console.WriteLine(emp.Manager)
            Console.WriteLine("----------")
            For Each s In emp.Employees
                Console.WriteLine("  {0}", s.FullName)
            Next
        End If
    Next

    End Sub

    Class Employee

        Property ID As Integer = 0
        Property FullName As String = String.Empty
        Property StartDate As Date = Nothing
        Property EndDate As Date = Nothing
        Property Manager As String = String.Empty
    End Class
    Class EmpGroup
        Property Manager As String
        Property Employees As IEnumerable(Of Employee)
    End Class

End Module

这是我目前所在的地方。我认为通过对它们进行分组,我可以使这更容易一些。

此外,行必须分组,因为我将它们添加到ul,这就是我使用|来帮助传达这是预期输出的原因。

提前感谢所有意见和建议。

asp.net vb.net
1个回答
1
投票

试试这个:

Dim employees As List(Of Employee) = New List(Of Employee)()
employees.Add(New Employee With {.ID = 1, .FullName = "Jane Lynch", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = ""})
employees.Add(New Employee With {.ID = 2, .FullName = "James Pierce", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Jane Lynch"})
employees.Add(New Employee With {.ID = 3, .FullName = "Jesse Mats", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Jane Lynch"})
employees.Add(New Employee With {.ID = 4, .FullName = "Anna Boxes", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Jane Lynch"})
employees.Add(New Employee With {.ID = 5, .FullName = "Rob Riggle", .StartDate = New DateTime(2016, 5, 10), .EndDate = New DateTime(2022, 4, 1), .Manager = ""})
employees.Add(New Employee With {.ID = 6, .FullName = "Paul Rudd", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Rob Riggle"})
employees.Add(New Employee With {.ID = 7, .FullName = "Mike Judge", .StartDate = New DateTime(2015, 1, 1), .EndDate = New DateTime(2020, 1, 1), .Manager = "Rob Riggle"})

Dim lookup = employees.ToLookup(Function (e) e.Manager)

For Each manager In lookup("")
    Dim line = String.Format("Manager: {0} | Start Date : {1:MM/dd/yyyy} | End Date : {2:MM/dd/yyyy}", manager.FullName, manager.StartDate, manager.EndDate)
    Console.WriteLine(line)
    Console.WriteLine("".PadRight(line.Length, "-"c))
    For Each employee In lookup(manager.FullName)
        Console.WriteLine(String.Format("| Employee: {0}", employee.FullName))
    Next
Next

我明白了:

Manager: Jane Lynch | Start Date : 01/01/2015 | End Date : 01/01/2020
---------------------------------------------------------------------
| Employee: James Pierce
| Employee: Jesse Mats
| Employee: Anna Boxes
Manager: Rob Riggle | Start Date : 05/10/2016 | End Date : 04/01/2022
---------------------------------------------------------------------
| Employee: Paul Rudd
| Employee: Mike Judge
© www.soinside.com 2019 - 2024. All rights reserved.