按Visual Basic列出(Of T)组

Jun*_* L. 2 vb.net windows-store-apps

我想按类别在gridview中对电影分组。我有C#代码,我想将其转换为Visual Basic。

var moviesByCategories = movies.GroupBy(x => x.Category)
            .Select(x => new MovieCategory { Title = x.Key, Items = x.ToList() });
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但它给了我一个错误。

Dim query = From film In movies Group film.Title By Category = film.Category Into grpTitle = Group
Run Code Online (Sandbox Code Playgroud)

UPDATE使用Plutonix建议的converter.telerik.com

Dim moviesByCategories = movies.GroupBy(Function(x) x.Category).[Select](Function(x) New MovieCategory() With { _
Key .Title = x.Key, _
Key .Items = x.ToList() _
})
Run Code Online (Sandbox Code Playgroud)

但是代码不起作用给出了以下错误 在此处输入图片说明

我的课程1. MoviePageViewModel

Public Class MoviesPageViewModel
    Private _Items As List(Of MovieCategory)
    Public Property Items() As List(Of MovieCategory)
        Get
            Return _Items
        End Get
        Set(ByVal value As List(Of MovieCategory))
            _Items = value
        End Set
    End Property

    Sub New()
        Dim movies As List(Of Movie) = New List(Of Movie)
       'adding movies to movies list
        Dim moviesByCategories = movies.GroupBy(Function(x) x.Category).[Select](Function(x) New MovieCategory() With { _
Key .Title = x.Key, _
Key .Items = x.ToList() _
 })
        Items = moviesByCategories
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

2.电影课

Public Class Movie
    Private _Title As String
    Public Property Title() As String
        Get
            Return _Title
        End Get
        Set(ByVal value As String)
            _Title = value
        End Set
    End Property
    Private _Subtitle As String
    Public Property Subtitle() As String
        Get
            Return _Subtitle
        End Get
        Set(ByVal value As String)
            _Subtitle = value
        End Set
    End Property
    Private _Image As String
    Public Property Image() As String
        Get
            Return _Image
        End Get
        Set(ByVal value As String)
            _Image = value
        End Set
    End Property
    Private _Category As String
    Public Property Category() As String
        Get
            Return _Category
        End Get
        Set(ByVal value As String)
            _Category = value
        End Set
    End Property
    Sub New(title As String, category As String, subtitle As String, img As String)
        _Title = title
        _Subtitle = subtitle
        _Image = img
        _Category = category
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
  1. 电影类别

    Public Class MovieCategory
    Private _Title As String
    Public Property Title() As String
        Get
            Return _Title
        End Get
        Set(ByVal value As String)
            _Title = value
        End Set
    End Property
    Private _Items As List(Of Movie)
    Public Property Items() As List(Of Movie)
        Get
            Return _Items
        End Get
        Set(ByVal value As List(Of Movie))
            _Items = value
        End Set
    End Property
    
      End Class
    
    Run Code Online (Sandbox Code Playgroud)

    更新现在我使用汤姆提供的代码后收到此错误 在此处输入图片说明

Tim*_*ter 5

查询语法(我更喜欢在VB.NET中):

Dim query = From movy In movies
    Group By category = movy.Category Into MovyCategoryGroup = Group
    Select New MovieCategory With {
        .Title = category,
        .Items = MovyCategoryGroup.ToList()
    }
Run Code Online (Sandbox Code Playgroud)

方法语法:

Dim query = movies.GroupBy(Function(m) m.Category).
    Select(Function(g) New MovieCategory With {
        .Title = g.Key,
        .Items = g.ToList()
    })
Run Code Online (Sandbox Code Playgroud)

  • @Jay_P:我不知道你从哪里得到那个例外。查询本身有效。我已经在您的课程中对其进行了测试。但是,我已经编辑了答案以显示方法语法。 (2认同)