LINQ从每条记录中获取两条记录

LINQ从每条记录中获取两条记录,linq,Linq,我有一个此类对象的列表: MyObject .StartDate .EndDate .Number 对于每个对象,我要返回两个对象: NewObject .Date .Number 其中一个对象中的日期为EndDate和Number。 另一个对象日期将是StartDate,数字将是负数是新对象类还是匿名类型?相同的想法,但速度更快+1@newStackExchangeInstance它是O(2n)。就像你的一样。Concat也必须对它进行迭代。@newStackExcha

我有一个此类对象的列表:

MyObject
  .StartDate
  .EndDate
  .Number
对于每个对象,我要返回两个对象:

NewObject
  .Date
  .Number
其中一个对象中的日期为EndDate和Number。
另一个对象日期将是StartDate,数字将是负数

新对象
类还是匿名类型?相同的想法,但速度更快+1@newStackExchangeInstance它是O(2n)。就像你的一样。Concat也必须对它进行迭代。@newStackExchangeInstance我的是O(2*n),你的是O(n*2)!我们做的完全一样,但顺序不同。塞德里克,让我看看。在MyObject上迭代两次。O(2n)。然后,Concat还需要遍历这两个部分。O(4n)。比我想象的还要高!
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 });
MyObjects.SelectMany(o => new[] { 
    new NewObject { Date = o.EndDate, Number = o.Number },
    new NewObject { Date = o.StartDate, Number = -o.Number } } );
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
            }
        };