2013-07-25 6 views
1

У меня есть список объектов этого типа:LINQ получить две записи из каждой записи

MyObject 
    .StartDate 
    .EndDate 
    .Number 

Для каждого объекта я хочу вернуть два объекта:

NewObject 
    .Date 
    .Number 

В котором в одном объекте Дата будет EndDate и Number. Другого объекта Дата будет StartDate и номер будет отрицательное Количество

+0

Является ли 'NewObject' класс или анонимный тип? –

ответ

3
MyObjects.SelectMany(o => new[] { 
    new NewObject { Date = o.EndDate, Number = o.Number }, 
    new NewObject { Date = o.StartDate, Number = -o.Number } }); 
+1

Такая же идея, но быстрее +1 –

+0

Простая и понятная :) –

0
var result = (from myObject in MyObjects 
       select new NewObject { Date = myObject.StartDate, Number = -myObject.number }).Concat 
      (from myObject in MyObjects 
       select new NewObject { Date = myObject.EndDate, Number = myObject.number }); 
+0

O (3n) ... не очень хорошо. –

+0

@newStackExchangeInstance Это O (2n). Как твой. –

+0

Конкат должен также перебирать его. –

0
var q = from o in MyObjects 
     select new { 
      NewObject1 = new NewObject(){ 
       Date = o.StartDate, 
       Number = -o.Number 
      }, 
      NewObject2 = new NewObject(){ 
       Date = o.EndDate, 
       Number = o.Number 
      } 
     }; 
Смежные вопросы