using System.Collections.Generic;
public static void Main()
List<Foo> foos = new List<Foo> {
new Foo { Id=1, Name="A", Value=1200, Date=new DateTime(2016,12,31) },
new Foo { Id=2, Name="B", Value=5200, Date=new DateTime(2016,12,31) },
new Foo { Id=3, Name="C", Value=3500, Date=new DateTime(2016,12,31) },
new Foo { Id=4, Name="D", Value=100, Date=new DateTime(2016,12,31) },
List<Bar> bars = new List<Bar> {
new Bar { Id=44, Value=859, Date=new DateTime(2016,12,8) },
new Bar { Id=23, Value=851, Date=new DateTime(2016,12,7) },
new Bar { Id=31, Value=785, Date=new DateTime(2016,12,9) }
var results = foos.Zip(bars, (f, b) => new Result{
FooId = f.Id, Name = f.Name, Value = f.Value + b.Value, BarId = b.Id, Date = b.Date
}).Concat(foos.Skip(bars.Count).Select(f => new Result {
FooId = f.Id, Name = f.Name, Value = f.Value
foreach(var item in results)
Console.Write("{0} {1} {2} {3} {4}", item.FooId, item.Name, item.Value, item.BarId, item.Date);
public int Id { get; set; }
public string Name { get; set; }
public int Value { get; set; }
public DateTime Date { get; set; }
public int Id { get; set; }
public int Value { get; set; }
public DateTime Date { get; set; }
public int FooId {get; set; }
public string Name {get; set; }
public int Value {get;set;}
public int? BarId {get;set;}
public DateTime? Date {get; set;}