【问题标题】:Compare two List<DateTime> in C#比较 C# 中的两个 List<DateTime>
【发布时间】:2013-12-11 20:27:45
【问题描述】:

我有以下代码;

'list of dates
List<DateTime> oAllDates = new List<DateTime>();

// Imagine we are adding DateTime objects with the following values.
oAllDates.Add("2013-11-01"); 
oAllDates.Add("2013-11-02"); 
oAllDates.Add("2013-11-03"); 
...
oAllDates.Add("2013-11-30"); 

List<DateTime> MyDates = new List<DateTime>();
MyDates.Add("2013-11-03");

如果 MyDates 中的任何日期出现在 oAllDates 列表中,我想得到一个布尔结果。我可以使用以下

foreach (DateTime dtDate in oAllDates)
{
    foreach (DateTime myDate in MyDates)
    {
        ...
    }
}

有没有更好的方法使用 LINQ 来实现这一点。另外,我有一个类似的列表

List<int> MyDaysByName = new List<int>();
MyDaysByName.Add(1); //sunday
MyDaysByName.Add(5); //thursday

我想在 oAllDates 中查找周日或周四的任何日期?

【问题讨论】:

  • oAllDates 的结构是什么?你有DateTime 类型属性吗?
  • 你到底是怎么做到的List&lt;DateTime&gt; oAllDates = new List&lt;oAllDates&gt;();
  • 我建议您单独问第二个问题,以便其他用户受益
  • 但我的第二个问题仍然是使用相同的 oAllDates 列表

标签: c# linq list datetime compare


【解决方案1】:

您可以使用Intersect

var anyOfthem = oAllDates.Intersect(MyDates).Any();

【讨论】:

  • @Tommo1977 请注意DateTime 的默认比较器也会考虑“时间”部分。
  • oAllDates 不是List&lt;DateTime&gt; 它是一个自定义对象,我猜具有相同的DateTime 属性
  • @Habib 哦,对了,没发现。对我来说看起来有点奇怪,因为列表定义不是 DateTime,但它的迭代是。
  • @AdamHouldsworth,问题刚刚得到了幽灵编辑,现在它是 DateTime 列表,非常完美的答案
  • @wudzik,我相信您的原始答案是正确的,问题刚刚被编辑。 +1 :)
【解决方案2】:

使用Intersect

bool result = oldDates.Intersect(MyDates).Any();

【讨论】:

    【解决方案3】:
    oAllDates.Any(x => MyDates.Contains(x));
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      相关资源
      最近更新 更多