如何在C#中比较日期列表?

7
我有两个日期列表。我需要比较这两个列表并找出缺失的日期。我的第一个列表如下:
2015-07-21
2015-07-22
2015-07-23
2015-07-24
2015-07-25
2015-07-26
2015-07-27

我的第二个列表看起来像这样

2015-07-21
2015-07-22
2015-07-23
2015-07-25
2015-07-26
2015-07-27

我需要在两个列表之间找到缺失的日期:
我尝试了这个。
var anyOfthem = firstList.Except(secondList);

但是它没有起作用。有人可以帮我吗?

你需要获取缺失的日期吗? - LzyPanda
是的,我需要获取缺失的日期 @LzyPanda - Priya
2
除了会返回除了secondList中的值之外的所有值。因此,它与您想要的完全不同。 - Steffen Winkler
2
你所说的“没起作用”是什么意思?你得到了什么,而不是你想要的结果? - MakePeaceGreatAgain
@SteffenWinkler 这将返回集合的差异,因此在这种情况下是一个单项收集:2015-07-24。 Priya,这不是你想要的吗?或者你希望它可以双向工作? - vc 74
显示剩余4条评论
4个回答

9

你可以使用 .Except().Union() 方法:

        string[] array1 = 
        {
        "2015-07-21",
        "2015-07-22",
        "2015-07-23",
        "2015-07-24",
        "2015-07-25",
        "2015-07-26",            
        };

        string[] array2 = 
        {
        "2015-07-21",
        "2015-07-22",
        "2015-07-23",            
        "2015-07-25",
        "2015-07-26",
        "2015-07-27"
        };

        var result = array1.Except(array2).Union(array2.Except(array1));

        foreach (var item in result) 
        {
           Console.WriteLine(item);
        }

输出结果: "2015-07-24", "2015-07-27",


3
string[] array1 = 
{
    "2015-07-21",
    "2015-07-22",
    "2015-07-23",
    "2015-07-24",
    "2015-07-25",
    "2015-07-26",            
};

string[] array2 = 
{
    "2015-07-21",
    "2015-07-22",
    "2015-07-23",            
    "2015-07-25",
    "2015-07-26",
    "2015-07-27"
};

var common = list1.Intersect(list2);
var anyOfThem = list1.Except(common).Concat(list2.Except(common));

foreach (var date in anyOfThem)
    Console.WriteLine(date);

// 2015-07-24
// 2015-07-27

0
你需要检查一个列表是否包含另一个列表的值:
var anyOfthem = firstList.Where(x => !secondList.Contains(x));

0
希望这正是你所寻找的内容:
var notamatch= firstList.Where(x => !anyOfthem.Any(y => y.yourseconddatename== x.yourfirstdatename));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接