using System;
using System.Linq;
public class Test
{
public static void Main()
{
var list1 = new[] { new { ID = 1 }, new { ID = 2 }, new { ID = 3 } };
var list2 = new[] {
new {
ID = 1,
Name = "Jason"
},
new {
ID = 1,
Name = "Jim"
},
new {
ID = 2,
Name = "Mike"
},
new {
ID = 3,
Name = "Phil"
}
};
var lst = list1
// Select distinct IDs that are in both lists:
.Where(lst1 => list2
.Select(lst2 => lst2.ID)
.Contains(lst1.ID))
.Distinct()
// select items in list 2 matching the IDs above:
.Select(lst1 => list2
.Where(lst2 => lst2.ID == lst1.ID)
.First());
foreach(var item in lst)
{
Console.WriteLine("ID: {0}, Name: {1}", item.ID, item.Name);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKdmFyIGxpc3QxID0gbmV3W10geyBuZXcgeyBJRCA9IDEgfSwgbmV3IHsgSUQgPSAyIH0sIG5ldyB7IElEID0gMyB9IH07CnZhciBsaXN0MiA9IG5ld1tdIHsKCW5ldyB7CgkJSUQgPSAxLAoJCU5hbWUgPSAiSmFzb24iCgl9LAoJbmV3IHsgCgkJSUQgPSAxLAoJCU5hbWUgPSAiSmltIgoJfSwKCW5ldyB7CgkJSUQgPSAyLAoJCU5hbWUgPSAiTWlrZSIKCX0sCgluZXcgewoJCUlEID0gMywKCQlOYW1lID0gIlBoaWwiCgl9Cn07Cgp2YXIgbHN0ID0gbGlzdDEKCS8vIFNlbGVjdCBkaXN0aW5jdCBJRHMgdGhhdCBhcmUgaW4gYm90aCBsaXN0czoKCS5XaGVyZShsc3QxID0+IGxpc3QyCgkJLlNlbGVjdChsc3QyID0+IGxzdDIuSUQpCgkJLkNvbnRhaW5zKGxzdDEuSUQpKQoJLkRpc3RpbmN0KCkKCS8vIHNlbGVjdCBpdGVtcyBpbiBsaXN0IDIgbWF0Y2hpbmcgdGhlIElEcyBhYm92ZToKCS5TZWxlY3QobHN0MSA9PiBsaXN0MgoJCS5XaGVyZShsc3QyID0+IGxzdDIuSUQgPT0gbHN0MS5JRCkKCQkuRmlyc3QoKSk7CQkKCiAgICAgICAgICAgIGZvcmVhY2godmFyIGl0ZW0gaW4gbHN0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiSUQ6IHswfSwgTmFtZTogezF9IiwgaXRlbS5JRCwgaXRlbS5OYW1lKTsKICAgICAgICAgICAgfQoJfQp9