110,536
社区成员
发帖
与我相关
我的任务
分享
var query = listB.Where(p =>
{
if (!listA.Any(s => s.id == p.id)) return true;
if (listA.Any(s=>s.id == p.id && s.date < p.date)) return true;
return false;
});
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<Entity> listA = new List<Entity>();
List<Entity> listB = new List<Entity>();
listA.AddRange(new Entity[] {
new Entity() { id = 1, date = new DateTime(2016, 11, 20) },
new Entity() { id = 2, date = new DateTime(2016, 11, 20) }
});
listB.AddRange(new Entity[] {
new Entity() { id = 1, date = new DateTime(2016, 11, 20) },
new Entity() { id = 2, date = new DateTime(2016, 11, 21) },
new Entity() { id = 3, date = new DateTime(2016, 11, 21) }
});
var result = from a in listA
join b in listB on a.id equals b.id
where b.date > a.date
select b;
listB.Except(listA, new EntityEquality()).Concat(result).ToList().ForEach(e => {
Console.WriteLine("id: " + e.id + " date: " + e.date.ToShortDateString());
});
Console.ReadLine();
}
}
public class Entity
{
public int id { get; set; }
public DateTime date { get; set; }
}
public class EntityEquality : IEqualityComparer<Entity>
{
public bool Equals(Entity x, Entity y)
{
return x.id == y.id;
}
public int GetHashCode(Entity obj)
{
if (obj == null)
{
return 0;
}
else
{
return obj.ToString().GetHashCode();
}
}
}
}