2009-06-10 2 views
3

У меня есть одна таблица, и мне нужно собрать кучу вложенных объектов на основе одной таблицы.Запрос Linq, как построить вложенные объекты из одной таблицы

данные:

PointB Месяц точке А Время Цены 1-11 11:00 10,99 1-12 11:00 9,99

Объекты

ТОЧКА {точки А, PointB, Детали} Подробности {Month, ExtraDetails} ExtraDetails {Время, цена}

Я хочу, чтобы не иметь нагрузок циклов и операторов if, поэтому должен иметь возможность использовать linq сделать это. но это выходит за рамки моего опыта работы.

редактировать: Это нужно группировать как хорошо

помощь было бы здорово.

Благодаря

ответ

3

Просто опробовали решение:

var nestedObjects = from row in data 
    select new {row.PointA, row.PointB, Details = new { 
     row.Month, ExtraDetails = new { 
      row.Time, row.Price 
     } 
    }}; 

Th что вы уже получили данные в данных.


Группа по

Если вы хотите сгруппировать Баллов вместе, нужно 'Group By':

var nestedObjects = from row in data 
    group row by new { row.PointA, row.PointB } into Points 
    select new { 
     Points = Points.Key, 
     Details = from details in Points 
      select new { row.Month, ExtraDetails = new { 
       row.Time, row.Price 
      }} 
    }; 

Немного сложнее - конечно, вы можете сгруппировать по месяцам, в этом случае вам нужно следовать той же схеме, что и для бита Points. Обратите внимание: это не приведет к созданию таблиц, потому что группа не делает этого, но по крайней мере создает структуру для вас.

0

Предполагая, что вы получили ваши классы определены для объектов, которые вы упомянули, и у вас есть конструктор или свойства, так что вы можете Собственость создать объект в одной строке может иметь запрос LINQ, возвращающий список из ТОЧЕК ,

Если бы что-то ЛИК это:

var res = 
    from item in table.AsEnumerable() 
    select new Points(){PointA = item["PointA"]; 
          PointB = item["PointB"]; 
          Details = from item2 in table.AsEnumberable() 
            where item["PointA"] = item2["PointA"] and item["PointB"] = item2["PointB"] 
            select new Details(){ 
                  month=item2["month"], 
                  extraDetails = from item3 in table.AsEnumerable()... 
                 } 
         }; 

В конце Рез будет IEnumerable Баллов

Я извиняюсь за код, я не на компьютере с .NET 3.5 так Я не могу написать правильный проверяемый запрос

+0

Так будет ли объект объектов проходить внутри объекта точки? а также будет ли эта группа объединяться вместе, чтобы повторения не было? –

+0

oK, теперь я действительно понял ваш вопрос. К несчастью, я не знаю ни одного soltion, который бы не требовал вложенных запросов linq. я обновлю код на что-то подобное. – AlexDrenea