2010-07-02 3 views
1

Я все еще пытаюсь получить зависание LINQ, и у меня возникают проблемы с этим. У меня есть List<Data> так:LINQ группировка и выбор в свойствах

GroupId|SectionId|Content 
------------------------- 
     1|  3|part1-2 
     1|  7|part1-1 
     3|  3|part3-2 
     1|  1|part1-3 
     3|  1|part3-3 
     3|  7|part3-1 

Я хотел бы, чтобы преобразовать его в IEnumerable<AnonymousType> где каждый AnonymousType представляет собой одну GroupId и каждое свойство связано с конкретным SectionId. Другими словами, вы бы в конечном итоге с чем-то вроде этого:

{ 
    { 
    GroupId = 1, 
    Part1 = "part1-1", // From SectionId == 7 
    Part2 = "part1-2", // From SectionId == 3 
    Part3 = "part1-3", // From SectionId == 1 
    }, 
    { 
    GroupId = 3, 
    Part1 = "part3-1", // From SectionId == 7 
    Part2 = "part3-2", // From SectionId == 3 
    Part3 = "part3-3", // From SectionId == 1 
    } 
} 
+0

Как вы карту SectionId, чтобы свойства? – SLaks

+0

Есть ли у каждой группы 3 части, или она может меняться? – LukeH

+0

Он всегда будет иметь такое же количество частей, и у меня есть список SectionIds в моем коде (у меня есть Enum с предопределенными значениями, но он может быть const). –

ответ

3

Как это:

from r in something 
group r by r.GroupId into g 
select new { 
     GroupId = g.Key, 
     Part1 = g.First(r => r.SectionId == 7).Content, 
     Part2 = g.First(r => r.SectionId == 3).Content, 
     Part3 = g.First(r => r.SectionId == 1).Content 
} 
+0

Отлично, они закрыли нашу базу данных для «обслуживания», поэтому я не могу ее протестировать. У меня было все до g.Key. Я продолжаю забывать, что g "содержит" все элементы группы, поэтому это должно работать. Я думаю, что я буду использовать '.Single (...)' вместо '.First (...)' в случае, если у меня неожиданно будет более одного результата, и в этом случае я предпочитаю уходить, вместо того, чтобы иметь «неопределенное» поведение , –

+0

Я не уверен, что вызовы 'First' или' Single' будут работать в LINQ-to-SQL. – SLaks

+0

Это LINQ-to-Objects, так что не беспокойтесь. Постскриптум Кажется, вам нравится LINQ, поскольку вы обнаруживаете в большинстве вопросов LINQ, которые у меня есть. :) –

Смежные вопросы