Member 14800672 Ответов: 2

Как мне сгруппироваться, чтобы получить определенные результаты из списка


Допустим, у меня есть это
Id    Day      Time
1     Sun   8am to 4pm
1     Sun   5pm to 9pm
1     Mon   8m  to 6pm
1     Tue   8m  to 6pm
2     Sun   8am to 4pm
2     Mon   8am to 4pm


Я хочу сделать ответ api в .net framework ,то ожидаемый результат это когда я выбираю id=1
{
"Tables": [
 {
"hours":							
[
{
 "days": "Sun"
  "time": [
              "8am to 4pm",
              "5pm to 9pm"
           ]
}
{
  "day": Mon - Tue
  "time":[ 8am to 6pm]
}
{
 "day": "wednesday-sat" 
  "time": [
		closed
         ]
}	
]
}
]
}


Что я уже пробовал:

У меня есть этот класс TableList:
public class TableList  //api response class
{
    public List<Table> Table { get; set; }
}


а это класс таблицы
public class Table  //api response class
{
    public List<Hours> hours { get; set; }
    public Table (List<Hours> _hours)
    {
      this.hours = _hours;
    }
}


public class Hours      //api response class
{
    public string days { get; set; }
    public <string> time { get; set; }

    public Hours(string days, <string> time)
    {
        this.days = days;
        this.time = time;
    }
}



TableList tableList = new TableList ();

TableList.Table= new List<Table>();


List<TableValue> tableValue= service.getTime(1);  //table value has the data from SQL

foreach (TableValues tv in tableValues) //Tablevalues has the values of the record
{
     List<string> hourtime= new List<string>
     {
                        new string(tv.hours.ToCharArray())
     };
 List<Hours> hours = new List<Hours>
 {
    new Hours(tv.days, hourtime)
  };
  TableList.Table.Add(new Table(hours))
}



Но то, что я сейчас получаю, это

{
"Tables": [
 {
"hours":							
[
{
 "days": "Sun"
  "time": 
              ["8am to 4pm"]       
}
] 
}, 
{
"hours":							
[
{
 "days": "Sun"
  "time": 
              ["5pm to 9pm"]
}
] 
}, 
{
"hours":							
[
{
  "day": Mon
  "time": [8am to 6pm]
}
] 
}, 
{
"hours":							
[
{
  "day": Tue
  "time":[ 8am to 6pm]
}
] 
} 

]
}


я хочу получить часы Id=1 один раз, а внутри них-дни и время. Мне не нужен новый массив для каждого нового времени одного и того же идентификатора. Я также не хочу, чтобы в воскресенье было два альбома. Также хочу, если более одного дня имеет одно и то же время, то нет необходимости показывать в новом массиве я хочу, чтобы это было похоже на ожидаемый результат, который я показал u выше. и я тоже хочу реализовать "закрытое"

2 Ответов

Рейтинг:
0

F-ES Sitecore

Я предполагаю, что многочисленные опечатки в коде, который вы опубликовали, которые остановят его компиляцию, не являются проблемой.

Все что вам нужно сделать это проверить существует ли уже этот день и если да то добавить к нему время а если нет то добавить его с помощью одного времени

foreach (TableValue tv in tableValue)
{
    // see if the day already exists in the collection
    Hours existingDay = tableList.Table.Count == 0 ? null : tableList.Table.First().hours.FirstOrDefault(h => h.days == tv.days);

    // if not we'll add it
    if (existingDay == null)
    {
        List<Hours> hours = new List<Hours>
        {
            new Hours(tv.days, new List<string>{tv.time })
        };

        tableList.Table.Add(new Table(hours));
    }
    else
    {
        // the day already exists so we just need to add the time
        existingDay.time.Add(tv.time);
    }
}


Member 14800672

Я отредактировал опечатки и ответ, который я сейчас получаю ( я думаю, что ошибся, когда впервые написал его),
Если вы видите отредактированную запись, то я получаю новую запись с id=1 четыре раза (час повторяется 4 раза) вместо 1 часа, и внутри нее находятся разные тайминги. Поэтому я не уверен, что это повлияет на решение, которое вы предоставили.

Я думаю, что мне нужно сгруппироваться по идентификатору, так что, пожалуйста, помогите.

Я посмотрю на ваш ответ сейчас и посмотрю, сработает ли он

Member 14800672

Только что попробовал это не работает

Рейтинг:
0

Maciej Los

Невозможно достичь json, который вы ожидали, из-за тонны причин...

1.
Наиболее важным является то, что входные данные не содержат соответствующих значений для таких выходных данных:

"day": "wednesday-sat" 
  "time": [
		closed
         ]

2.
В вашем проекте классы плохо спроектированы, потому что они не соответствуют вашей структуре json.

Взгляните сюда: Мгновенный синтаксический анализ JSON на любом языке | quicktype[^] чтобы узнать, как должна выглядеть ваша строка json и как подготовить соответствующие классы.
Примечание: там вы найдете только часть своей работы. Не стесняйтесь улучшать это.