【问题标题】:vb.net LINQ to Object grouping by create datevb.net LINQ to Object 按创建日期分组
【发布时间】:2020-04-29 22:43:16
【问题描述】:

我有一个当前返回对象数组 (JSON) 的 .net webapi 端点。

我正在尝试按创建日期对项目进行分组,但我无法制定 LINQ 语句来实现这一点。

类:

Public Class mImage
    Public Property fileName As String
    Public Property id As Guid
    Public Property description As String
    Public Property createDate As DateTime
End Class
Public Class mImageParent
    Public Property groupDate As DateTime
    Public Property images As List(Of mImage)
    Public Property groupCount As Integer
End Class

我当前的 JSON 返回如下所示:

obj: [
       {"fileName":"a","id":"1","createDate":"1-1-2020"},
       {"fileName":"b","id":"2","createDate":"1-1-2020"},
       {"fileName":"c","id":"3","createDate":"2-1-2020"}
     ]

我试图将其返回为:

obj: {"groupDate":"1-1-2020",
      "images": [
           {"fileName":"a","id":"1","createDate":"1-1-2020"}, 
           {"fileName":"b","id":"2","createDate":"1-1-2020"}
       ]},
     {"groupDate":"2-1-2020",
      "images": [
           {"fileName":"c","id":"3","createDate":"2-1-2020"}
       ]}

当前只选择而不分组 LINQ(vb.net) 的代码:

Dim imageResult = (From p In db.file_images Where p.user_id = userIdParam).ToList()
For each p in imageResult 
   mImageList.Add(New mImage With {.id = p.image_id, .description = p.image_desc, .fileName = p.image_file, .createDate= p.create_timestamp})
Next

我不知道如何选择分组。 for..each 是必需的,因为在将项目添加到列表之前还会发生一些其他事情。

我拥有的语法(不工作,无法解决 select into):

Dim imageResultGroup = (From p in db.file_images where p.user_id = userIDParam).GroupBy(Function(g) g.create_timestamp).Select(Function(grp) New mImageParent with {.groupDate = grp.Key, images = grp.ToList()})

【问题讨论】:

    标签: vb.net linq


    【解决方案1】:

    以下方法将返回具有以下属性的匿名对象:

    1. createdDate - 分组日期
    2. 图像 - mImage 的集合

    VB.Net 代码:

    Dim groupedImages = 
            From fileImage As mImage In fileImages
            Select fileImage
            Group By createdDate = fileImage.createDate
            Into images = Group
            Order By createdDate
    

    通过一些重构,您可以将 createdDate 属性重命名为 groupDate。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多