vb. net LINQ для группировки объектов по дате создания - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть конечная точка. net webapi, которая в настоящее время возвращает массив объектов (JSON).

Я пытаюсь сгруппировать элементы по дате создания, но я не могу обработать оператор 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, потому что некоторые другие вещи продолжаются до того, как элемент добавляется в список.

Синтаксис, который у меня есть (не работает, не может обработать выбор в):

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()})

1 Ответ

0 голосов
/ 29 апреля 2020

Следующий метод возвращает анонимный объект со следующими свойствами:

  1. createDate - сгруппированные по дате
  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

С помощью небольшого рефакторинга вы можете переименовать свойство createDate в groupDate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...