Как объединить вывод цикла foreach в один?

Код подобен основному элементу, а ИдСуб подобен подэлементу основного. 1 основной пункт может иметь несколько подпунктов.

У меня есть этот код foreach в моем коде.

 foreach (var subID in Ids)
     {
          Display display = new Display();

           display.Code = item.Code;
           display.Name = item.Name;
           display.Price = item.Price;
           display.IdSub = subID ;
           DisplayList.Add(display);
    }

Поскольку Идентификаторы имеет 3 субидентификатор, поэтому на выходе есть 3 строки данных. Я хочу, чтобы Код, Имя, Цена были такими же, как основной элемент. Я хочу, чтобы он объединился в 1 строку с несколькими ИдСуб. Как я могу объединить / объединить эти данные?

Этот вопрос в основном точно такой же, как и этот: stackoverflow.com/questions/55565332/…

Loocid 09.04.2019 08:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
311
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Затем вам нужно изменить поле/свойство IdSub в вашем классе Display на массив целых чисел: int[] (вы можете сделать это по-другому, но это лучший подход IMO).

Затем вы можете опустить цикл:

Display display = new Display()
{
  Code = item.Code,
  Name = item.Name,
  Price = item.Price,
  IdSub = Ids //if Ids is array of ints, else you need to use ToArray() method
}

DisplayList.Add(display);

Чтобы отображать данные IdSub с привязкой, вам нужно определить дополнительное свойство в вашем классе Display:

public string IdSubDisplay
{
  get
  {
    return string.Join(",", IdSub);
  }
  set { }
}

и привязать к IdSubDisplay.

это дает ошибку для Ids, так как Ids это список, подобный этому List<int> Ids =...

newbie 09.04.2019 09:06

@newbie Тогда определите IdSub как List<int> или напишите IdSub = Ids.ToArray()

Michał Turczyn 09.04.2019 09:14

сэр, я попробовал ваш подход, теперь ошибки нет, но мой вывод для Id Sub стал таким Int32[] Array что пошло не так? он не отображал идентификатор сабвуфера

newbie 09.04.2019 10:17

@newbie Как вы это показываете? Вы должны использовать метод string.Join для отображения всех элементов в коллекции: string.Join(",", display.IdSub);

Michał Turczyn 09.04.2019 10:24

Я использовал Binding вот так <ListBoxItem Content = "{Binding IdSub}"/> где я должен поместить строку. присоединиться ?

newbie 09.04.2019 10:29

Большое спасибо. Ты спас мне жизнь :)

newbie 09.04.2019 10:54

У вас есть несколько вариантов сделать это. Вот один из самых простых:

foreach (var id in itemIds)
{
    if (DisplayList.Any(x=> x.Code == item.Code && x.Name == item.Name && x.Price == item.Price))
    {
        var display = DisplayList.Single(x=> x.Code == item.Code && x.Name == item.Name && x.Price == item.Price);
        display.IdSubs.Add(id);//change IdSub to IdSub, as a list of its previous type
    }
    else
    {
        Display display = new Display();
        display.Code = item.Code;
        display.Name = item.Name;
        display.Price = item.Price;
        display.IdSubs = new List<int>();//Assumed that IdSub was int
        DisplayList.Add(display);
    }
}

У меня есть несколько ошибок при использовании этого подхода. так как внутри моего itemIds содержится только id он не содержит ничего кроме этого.

newbie 09.04.2019 09:11

itemIds выглядит так: `List<int> itemIds =...`

newbie 09.04.2019 09:12

Я внес правку в оператор if, проверьте, пожалуйста.

thirdDeveloper 09.04.2019 09:13

У меня здесь ошибка new List<int>(); там написано Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'int'

newbie 09.04.2019 09:18

а тут display.IdSubs.Add(id); сказано 'int' does not contain a definition for 'Add' and no accessible extension method 'Add' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)

newbie 09.04.2019 09:19

измените IdSub на IdSubs, как список предыдущего типа. Если IdSub было int, IdSubs будет List<int>

thirdDeveloper 09.04.2019 09:21

если я изменю его, будет ошибка, сказав что-то вроде display does not contains IdSubs

newbie 09.04.2019 09:50

создайте новое свойство в классе Display с именем IdSubs и типом List<int>.

thirdDeveloper 09.04.2019 15:21

Другие вопросы по теме