language: C# (mono-2.8)
date: 236 days 15 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Linq;
using System.Collections.Generic;
 
class Object1
{
    public int id;
    public DateTime time;
    public override String ToString()
    {
        return String.Format("[{0}]{1}", id,time);
    }
}
 
public class Test
{
        public static void Main()
        {
           List<Object1> listOfNewestItems = new List<Object1>() { 
                new Object1 { id = 1, time = DateTime.Now.AddHours(1) },
                new Object1 { id = 2, time = DateTime.Now },
                 new Object1 { id = 3, time = DateTime.Now } 
            };
            List<Object1> listToCycleThrough = new List<Object1>() { 
                new Object1 { id = 1, time = DateTime.Now },
                new Object1 { id = 2, time = DateTime.Now } 
            };
 
            Console.WriteLine("before update(cycle-list):");
            foreach(var o1 in listToCycleThrough)
                Console.WriteLine(o1);
            Console.WriteLine("before update(new-list):");
            foreach(var o2 in listOfNewestItems)
                Console.WriteLine(o2);
 
            var listOfNewestIDs = listOfNewestItems.Select(o => o.id);
            var listToCycleIDs = listToCycleThrough.Select(o => o.id);
            var newestIDs = listOfNewestIDs.Except(listToCycleIDs);
            var newestObjects = from obj in listOfNewestItems
                                join objID in newestIDs on obj.id equals objID
                                select obj;
            var updateObjects = from newObj in listOfNewestItems
                                join oldObj in listToCycleThrough on newObj.id equals oldObj.id
                                where newObj.time > oldObj.time
                                select new { oldObj, newObj };
 
            foreach (var updObject in updateObjects)
                updObject.oldObj.time = updObject.newObj.time;
            listToCycleThrough.AddRange(newestObjects);
 
            Console.WriteLine("after update(cycle-list):");
            foreach(var o1 in listToCycleThrough)
                Console.WriteLine(o1);
            Console.WriteLine("after update(new-list):");
            foreach(var o2 in listOfNewestItems)
                Console.WriteLine(o2);
        }
}