using System;
using System.Collections.Generic;
using System.Linq;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
var list1 = new List<ItemOne>
{
new ItemOne {IDItem = 1, OneProperty = "1"},
new ItemOne {IDItem = 2, OneProperty = null},
new ItemOne {IDItem = 3, OneProperty = "3"},
new ItemOne {IDItem = 4, OneProperty = "4"}
};
var list2 = new List<ItemTwo>
{
new ItemTwo {IDItem = 2, TwoProperty = "2"},
new ItemTwo {IDItem = 3, TwoProperty = "3"},
};
var query = from x in list1
join y in list2 on x.IDItem equals y.IDItem
into z
from q in z.DefaultIfEmpty()
select new {IOne = x, ITwo = q};
foreach (var pair in query)
{
if (pair.ITwo != null) // && pair.IOne.OneProperty != null
pair.IOne.OneProperty = pair.ITwo.TwoProperty;
}
var resultList = query.Select(x => x.IOne).ToList();
foreach (var one in resultList)
{
Console.WriteLine(one.OneProperty);
}
System.Console.ReadLine();
}
public class ItemOne
{
public int IDItem { get; set; }
public string OneProperty { get; set; }
}
public class ItemTwo
{
public int IDItem { get; set; }
public string TwoProperty { get; set; }
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpuYW1lc3BhY2UgVGVzdEFwcAp7CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGxpc3QxID0gbmV3IExpc3Q8SXRlbU9uZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSXRlbU9uZSB7SURJdGVtID0gMSwgT25lUHJvcGVydHkgPSAiMSJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJdGVtT25lIHtJREl0ZW0gPSAyLCBPbmVQcm9wZXJ0eSA9IG51bGx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJdGVtT25lIHtJREl0ZW0gPSAzLCBPbmVQcm9wZXJ0eSA9ICIzIn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEl0ZW1PbmUge0lESXRlbSA9IDQsIE9uZVByb3BlcnR5ID0gIjQifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIGxpc3QyID0gbmV3IExpc3Q8SXRlbVR3bz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSXRlbVR3byB7SURJdGVtID0gMiwgVHdvUHJvcGVydHkgPSAiMiJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJdGVtVHdvIHtJREl0ZW0gPSAzLCBUd29Qcm9wZXJ0eSA9ICIzIn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gZnJvbSB4IGluIGxpc3QxCiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4geSBpbiBsaXN0MiBvbiB4LklESXRlbSBlcXVhbHMgeS5JREl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gegogICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHEgaW4gei5EZWZhdWx0SWZFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBuZXcge0lPbmUgPSB4LCBJVHdvID0gcX07CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBwYWlyIGluIHF1ZXJ5KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAocGFpci5JVHdvICE9IG51bGwpIC8vICYmIHBhaXIuSU9uZS5PbmVQcm9wZXJ0eSAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgcGFpci5JT25lLk9uZVByb3BlcnR5ID0gcGFpci5JVHdvLlR3b1Byb3BlcnR5OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmVzdWx0TGlzdCA9IHF1ZXJ5LlNlbGVjdCh4ID0+IHguSU9uZSkuVG9MaXN0KCk7CgogICAgICAgICAgICBmb3JlYWNoICh2YXIgb25lIGluIHJlc3VsdExpc3QpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKG9uZS5PbmVQcm9wZXJ0eSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3lzdGVtLkNvbnNvbGUuUmVhZExpbmUoKTsKCiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgY2xhc3MgSXRlbU9uZQogICAgICAgIHsKICAgICAgICAgICAgcHVibGljIGludCBJREl0ZW0geyBnZXQ7IHNldDsgfQogICAgICAgICAgICBwdWJsaWMgc3RyaW5nIE9uZVByb3BlcnR5IHsgZ2V0OyBzZXQ7IH0KICAgICAgICB9CgogICAgICAgIHB1YmxpYyBjbGFzcyBJdGVtVHdvCiAgICAgICAgewogICAgICAgICAgICBwdWJsaWMgaW50IElESXRlbSB7IGdldDsgc2V0OyB9CiAgICAgICAgICAgIHB1YmxpYyBzdHJpbmcgVHdvUHJvcGVydHkgeyBnZXQ7IHNldDsgfQogICAgICAgIH0KICAgIH0KfQo=