2017-01-28 13 views
2

У меня есть данные:Получить группировать данные из объектов в C#

data e1 = new data() { eventId = 1, eventName = "event1", hobbies = "hobbies1", note = "note1" }; 
data e2 = new data() { eventId = 1, eventName = "event1", hobbies = "hobbies2", note = "note2" }; 
data e3 = new data() { eventId = 2, eventName = "event2", hobbies = "hobbies3", note = "note3" }; 
data e4 = new data() { eventId = 2, eventName = "event2", hobbies = "hobbies4", note = "note4" }; 

Мне нужно это, чтобы быть сгруппированы в List<Event> класса на основе EVENTID и именем_события и eventDetails должны быть сгруппированы в соответствии с EVENTID и именем_события как List<EventDetails> свойство, содержащее значения «хобби» и «примечание».

public class Event 
{ 
    public int eventId { get; set; } 
    public string eventName { get; set; } 
    public List<EventDetails> eventDetails { get; set; } 
} 

//i want to get a List<Event> which group e1,e2 together and e3,e4 together 

Это можно сделать? не уверен, откуда мне нужно начинать. Какое наилучшее возможное решение я могу использовать?

+1

вы можете использовать linq! – Sajeetharan

+0

У вас есть список объектов данных? –

+0

Можете ли вы направить меня в любой пример – HSG

ответ

1

Вы можете использовать GroupBy LINQ чтобы достичь этого:

data e1 = new data() { eventId = 1, eventName = "event1", hobbies = "hobbies1", note = "note1" }; 
data e2 = new data() { eventId = 1, eventName = "event1", hobbies = "hobbies2", note = "note2" }; 
data e3 = new data() { eventId = 2, eventName = "event2", hobbies = "hobbies3", note = "note3" }; 
data e4 = new data() { eventId = 2, eventName = "event2", hobbies = "hobbies4", note = "note4" }; 

data[] arr = { e1, e2, e3, e4 }; 

List<Event> groupedList = arr.GroupBy(i => i.eventId) 
    .Select(j => new Event() 
    { 
     eventId = j.First().eventId, 
     eventName = j.First().eventName, 
     eventDetail = j.Select(f => new EventDetails() 
     { 
      hobbies = f.hobbies, 
      note = f.note 
     }).ToList() 
    }) 
    .ToList(); 
+1

Спасибо ... что сделал трюк !!! – HSG

+0

Рад, что это сработало. –

1

Предположим, у вас есть список объектов, вы можете попробовать его, как

List<data> dataObjects = ... 
List<Event> eventsData = dataObjects.Select(p=> new Event(){ eventId = p.eventId, eventName = p.eventName, 
            eventdetail = dataObjects.Where(q=> q.eventId == p.eventId).Select(r=> new EventDetails(){ hobbies = r.hobbies, note = r.note }).ToList() }).Distinct().ToList(); 

Убедитесь, что конструктор в классе Event, который инициализирует список как

public class Event 
{ 
    public int eventId { get; set; } 
    public string eventName { get; set; } 
    public List<EventDetails> eventdetail { get; set; } 

    public Event() 
    { 
     eventdetail = new List<EventDetails>(); 
    } 
} 
+0

Это дает мне повторяющиеся события ... но я понимаю, что вы пытаетесь сделать. Попробует. Спасибо за ваш быстрый ответ. – HSG

+1

Вы можете вызвать '.Distinct' на нем, чтобы удалить дубликаты и рад, что это помогло :) –

+0

Это' .Distinct() 'не удаляет повторяющиеся события. Я думаю, что HSG хочет группировать e1, e2 вместе, а также e3, e4 –