Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Linq顺序并按名称将列表中的2个项目分组_Vb.net_Linq_Sorting_Visual Studio 2012 - Fatal编程技术网

Vb.net Linq顺序并按名称将列表中的2个项目分组

Vb.net Linq顺序并按名称将列表中的2个项目分组,vb.net,linq,sorting,visual-studio-2012,Vb.net,Linq,Sorting,Visual Studio 2012,我有以下意见: Public Function GetProgramTitles() As List(Of ProgramTitle) Dim x As New List(Of ProgramTitle) x.Add(New ProgramTitle("Outlook.exe", "email1")) x.Add(New ProgramTitle("Outlook.exe", "email2")) x.Add(New ProgramTitle("Outlook

我有以下意见:

 Public Function GetProgramTitles() As List(Of ProgramTitle)
    Dim x As New List(Of ProgramTitle)

    x.Add(New ProgramTitle("Outlook.exe", "email1"))
    x.Add(New ProgramTitle("Outlook.exe", "email2"))
    x.Add(New ProgramTitle("Outlook.exe", "email1"))
    x.Add(New ProgramTitle("Outlook.exe", "email2"))
    x.Add(New ProgramTitle("Outlook.exe", "email1"))
    x.Add(New ProgramTitle("Word.exe", "Doc1"))
    x.Add(New ProgramTitle("Outlook.exe", "email2"))
    x.Add(New ProgramTitle("Word.exe", "Doc2"))
    x.Add(New ProgramTitle("Outlook.exe", "email1"))

    Return x
End Function
我想接收这些数据并返回如下内容:

Outlook.exe-7(程序实例)
-电子邮件1-4
-电子邮件2-3
Word.exe-2
-Doc1-1
-Doc2-1

这就是我到目前为止所做的:

    Dim data = GetProgramTitles()

    Dim programs = From c In data Select New With {c.Program, c.Title,
        .Programs =
        From o In c.Program
        Group o By c.Program Into Group
        Select New With {.Title = c.Title,
                            .TitleGroup =
                            From o In Group
                            Group o By c.Title Into TitleGroup = Group
                            Select New With {.Program = Program, .Title = TitleGroup}}}

    For Each p In programs
        Console.WriteLine("Program: " & p.Program & " - " & p.Title & " - " & p.Program.Count)
    Next

我得到的回报根本没有排序,我也不知道如何解决这个问题。

我不知道为什么你试图在内部查询中使用
groupby
,而不是在主查询中

Dim programs =
    From d In data
    Group d By dk = d.Program Into dg = Group, dc = Count()
    Order By dc Descending
    Select New With {
        .Program = dk,
        .Count = dc,
        .Titles =
            From t In dg
            Group t By tk = t.Title Into tg = Group, tc = Count()
            Select New With {
                .Title = tk,
                .Count = tc
            }
    }
我稍微更改了返回的匿名类型结构,因此您还必须为每个循环更改

For Each p In programs
    Console.WriteLine("Program: {0} - {1}", p.Program, p.Count)
    For Each t In p.Titles
        Console.WriteLine("Title: {0} - {1}", t.Title, t.Count)
    Next
Next
印刷品

Program: Outlook.exe - 7
Title: email1 - 4
Title: email2 - 3
Program: Word.exe - 2
Title: Doc1 - 1
Title: Doc2 - 1

的确,相当大的嵌套林克。也许您应该澄清一下这段代码的预期用途,以及您发布的示例输出(与输入不直接相关)。此外,我在您的代码中没有看到任何OrderBy(必须对记录进行排序,不是吗?),您是这方面的专家;)你试过使用吗?Lol:)是的,我在遵循一个MS示例,他们在不使用OrderBy的情况下使用嵌套项的这种结构:)