Как заставить GroupBy Table возвращать только одно значение в Linq - PullRequest
0 голосов
/ 29 мая 2019

Привет, поэтому у меня есть 2 таблицы с отношением один ко многим, я использую ado net и запрос Join, чтобы получить таблицу и ссылку, после чего я приведу свой DataTable как Enumerable, а затем использую операцию Linq, чтобы вернуть его как вложенныйJSON.Но проблема в том, что только поле GroupBy вернет одни данные, используя ключ, а все остальные вернут массив, столько же, сколько у записи, как это

  {
        "id": 23,
        "date": [
            "2018-01-01T00:00:00",
            "2018-01-01T00:00:00",
            "2018-01-01T00:00:00",
            "2018-01-01T00:00:00"
        ],
        "total_room_sold": [
            41,
            41,
            41,
            41
        ],
        "total_rom_revenue": [
            19340082,
            19340082,
            19340082,
            19340082
        ],
        "Segment": {
            "segment_name": [
                "BFR",
                "DIS",
                "PAR",
                "LON"
            ],
            "room_sold": [
                4,
                2,
                1,
                0
            ],
            "revenue_by_segment": [
                1904628,
                686605,
                461157,
                0
            ]
        }
    }

А для таблицы N: 1 мне нужноGroupBy снова, так что я могу получить, как это для сегмента

  {
            "id": 23,
            "date": [
                "2018-01-01T00:00:00",
                "2018-01-01T00:00:00",
                "2018-01-01T00:00:00",
                "2018-01-01T00:00:00"
            ],
            "total_room_sold": [
                41,
                41,
                41,
                41
            ],
            "total_rom_revenue": [
                19340082,
                19340082,
                19340082,
                19340082
            ],
            "Segment": [
             {
              "segment_name": "BFR",
              "rooom_sold" : 4,
              "revenue_by_segment" : 412313213
             },
             {
              "segment_name": "BFR",
              "rooom_sold" : 2,
              "revenue_by_segment" : 12312313
             }
             ]  

        }

Мой код на данный момент

var dt = dt.AsEnumerable().GroupBy(x => x.Field<dynamic>(id)).Select(x => new {
 id = x.key,
 date = x.Field<dynamic>("date"),
 total_room_sold = x.Field<dynami>(total_room_sold),
 Segment = x.Select(s => new {
 segment_name = s.Field<dynamic>("segment_name"),
 room_sold = s.Field<dynamic>("room_sold"),
 })

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