static void Main(string[] args)
    {
        // Test
        DateOfValues dov1 = new DateOfValues {
            Id = 1, Start = new DateTime(2011, 12, 01)
        };

        dov1.AddSomeValue(1, "OK", 2);
        dov1.AddSomeValue(2, "Not OK", 3);
        dov1.AddSomeValue(3, "Not OK", 4);
        dov1.AddSomeValue(4, "Additional dov1", 5);
        DateOfValues dov2 = new DateOfValues {
            Id = 1, Start = new DateTime(2011, 12, 02)
        };

        dov2.AddSomeValue(1, "OK", 2);
        dov2.AddSomeValue(2, "Not OK", 4);
        dov2.AddSomeValue(3, "OK", 1);
        dov2.AddSomeValue(6, "Additional dov2", 15);
        foreach (Tuple <SomeValue, SomeValue> difference in dov1.GetDifference(dov2))
        {
            if (difference.Item1 != null)
            {
                Console.WriteLine("Item1: Id:{0}; Status:{1}; Status Number:{2}",
                                  difference.Item1.Id, difference.Item1.Status, difference.Item1.StatusNumber);
            }
            if (difference.Item2 != null)
            {
                Console.WriteLine("Item2: Id:{0}; Status:{1}; Status Number:{2}",
                                  difference.Item2.Id, difference.Item2.Status, difference.Item2.StatusNumber);
            }
            Console.WriteLine("-------------------------------------------");
        }
    }
    public IEnumerable <Tuple <SomeValue, SomeValue> > GetDifference(DateOfValues other)
    {
        IEnumerable <SomeValue> notMatching = Values.Where(v => !other.Values.Any(o => v.Equals(o)))
                                              .Union(other.Values.Where(v => !Values.Any(o => v.Equals(o)))).Distinct();

        return(notMatching
               .GroupBy(x => x.Id)
               .Select(x =>
                       new Tuple <SomeValue, SomeValue>(
                           x.FirstOrDefault(y => y.Date == this), x.FirstOrDefault(y => y.Date == other))));
    }
Ejemplo n.º 3
0
    public IEnumerable <Tuple <SomeValue, SomeValue> > GetDifference(DateOfValues other)
    {
        var notMatching = Values.Except(other.Values, new SomeValueComparer())
                          .Union(other.Values.Except(Values, new SomeValueComparer()));

        return(notMatching
               .GroupBy(x => x.Id)
               .Select(x =>
                       new Tuple <SomeValue, SomeValue>(
                           x.FirstOrDefault(y => y.Date == this), x.FirstOrDefault(y => y.Date == other))));
    }