using System;
using System.Collections.Generic;
using System.Linq;
namespace myQuestion
{
class Program
{
public class DuplicateData
{
public string address { get; set; }
}
public class Com : IEqualityComparer<DuplicateData>
{
public bool Equals(DuplicateData x, DuplicateData y)
{
return x.address.Equals(y.address);
}
public int GetHashCode(DuplicateData obj)
{
return obj.address.GetHashCode();
}
}
static void Main()
{
List<string> lst = new List<string>();
lst.Add("a");
lst.Add("b");
lst.Add("c");
lst.Add("p");
List<DuplicateData> list = new List<DuplicateData>()
{
new DuplicateData{address="a"},
new DuplicateData{address="a"},
new DuplicateData{address="a"},
new DuplicateData{address="b"},
new DuplicateData{address="b"},
new DuplicateData{address="c"},
new DuplicateData{address="d"},
new DuplicateData{address="e"},
new DuplicateData{address="f"},
};
var dup = list.Distinct(new Com());
var RightJoin = from x in dup
join y in lst
on x.address equals y
into right
from z in right.DefaultIfEmpty(x.address)
select new
{
UniqueAddress = z,
};
foreach (var ex in RightJoin)
{
System.Console.WriteLine(ex.UniqueAddress);
}
System.Console.ReadLine();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgoKbmFtZXNwYWNlIG15UXVlc3Rpb24KewogICAgY2xhc3MgUHJvZ3JhbQogICAgewogICAgICAgIHB1YmxpYyBjbGFzcyBEdXBsaWNhdGVEYXRhCiAgICAgICAgewogICAgICAgICAgICBwdWJsaWMgc3RyaW5nIGFkZHJlc3MgeyBnZXQ7IHNldDsgfQogICAgICAgIH0KCiAgICAgICAgcHVibGljIGNsYXNzIENvbSA6IElFcXVhbGl0eUNvbXBhcmVyPER1cGxpY2F0ZURhdGE+CiAgICAgICAgewogICAgICAgICAgICBwdWJsaWMgYm9vbCBFcXVhbHMoRHVwbGljYXRlRGF0YSB4LCBEdXBsaWNhdGVEYXRhIHkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB4LmFkZHJlc3MuRXF1YWxzKHkuYWRkcmVzcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1YmxpYyBpbnQgR2V0SGFzaENvZGUoRHVwbGljYXRlRGF0YSBvYmopCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmouYWRkcmVzcy5HZXRIYXNoQ29kZSgpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQgTWFpbigpCiAgICAgICAgewogICAgICAgICAgICBMaXN0PHN0cmluZz4gbHN0ID0gbmV3IExpc3Q8c3RyaW5nPigpOwogICAgICAgICAgICBsc3QuQWRkKCJhIik7CiAgICAgICAgICAgIGxzdC5BZGQoImIiKTsKICAgICAgICAgICAgbHN0LkFkZCgiYyIpOwogICAgICAgICAgICBsc3QuQWRkKCJwIik7CgogICAgICAgICAgICBMaXN0PER1cGxpY2F0ZURhdGE+IGxpc3QgPSBuZXcgTGlzdDxEdXBsaWNhdGVEYXRhPigpCiAgICB7CiAgICAgICAgbmV3IER1cGxpY2F0ZURhdGF7YWRkcmVzcz0iYSJ9LAogICAgICAgIG5ldyBEdXBsaWNhdGVEYXRhe2FkZHJlc3M9ImEifSwKICAgICAgICBuZXcgRHVwbGljYXRlRGF0YXthZGRyZXNzPSJhIn0sCiAgICAgICAgbmV3IER1cGxpY2F0ZURhdGF7YWRkcmVzcz0iYiJ9LAogICAgICAgIG5ldyBEdXBsaWNhdGVEYXRhe2FkZHJlc3M9ImIifSwKICAgICAgICBuZXcgRHVwbGljYXRlRGF0YXthZGRyZXNzPSJjIn0sCiAgICAgICAgbmV3IER1cGxpY2F0ZURhdGF7YWRkcmVzcz0iZCJ9LAogICAgICAgIG5ldyBEdXBsaWNhdGVEYXRhe2FkZHJlc3M9ImUifSwKICAgICAgICBuZXcgRHVwbGljYXRlRGF0YXthZGRyZXNzPSJmIn0sCiAgICB9OwoKICAgICAgICAgICAgdmFyIGR1cCA9IGxpc3QuRGlzdGluY3QobmV3IENvbSgpKTsKICAgICAgICAgICAgdmFyIFJpZ2h0Sm9pbiA9IGZyb20geCBpbiBkdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4geSBpbiBsc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHguYWRkcmVzcyBlcXVhbHMgeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byByaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB6IGluIHJpZ2h0LkRlZmF1bHRJZkVtcHR5KHguYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBuZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWVBZGRyZXNzID0geiwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGV4IGluIFJpZ2h0Sm9pbikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKGV4LlVuaXF1ZUFkZHJlc3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFN5c3RlbS5Db25zb2xlLlJlYWRMaW5lKCk7CiAgICAgICAgfQp9Cn0=