检查日期是否为此日期或更大

时间:2009-06-10 22:35:15

标签: c# linq datetime

我试图用布尔值检查我的linq查询中的日期是这个日期还是更大。但它不像我想的那样工作。

这是我的代码

        public bool CheckMonth(int month)
    {
            if (month > System.DateTime.Now.Month)
            {
                return true;
            }
            else if (month == System.DateTime.Now.Month)
            {
                return true;
            }
            else
            {
                return false;
            }
    }

    public virtual IList<DateItem> GetThreeDateToList()
    {
        var data = new ScoutDataDataContext();

        var q = (from d in data.DateDetails
                 where d.Activate == 1 && CheckMonth(d.EndDate.Month) 
                 orderby d.Date.Date.Month descending
                 select new DateItem
                 {
                     Title = d.Title,
                     Date = d.Date.Date + " - " + d.EndDate.Date,
                     Link = d.Link,
                 }).Take(3);

        return q.ToList();
    }

任何了解不同方式的人?

4 个答案:

答案 0 :(得分:25)

你想做什么?根据您的文本,您想知道给定日期是今天还是更晚,但代码示例仅比较月份(这意味着今年6月与去年6月相同)。如果您想比较日期(包括年和日),这种比较将为您完成工作:

yourDate.Date >= DateTime.Now.Date

答案 1 :(得分:0)

这里的提供商是什么? LINQ到SQL?对象?实体框架? (从名称来看,它看起来像LINQ-to-SQL ......)

实际上,数据库提供商将无法处理您的方法;你有几个选择:

  • 内联它:&& d.EndDate.Month >= System.DateTime.Now.Month
  • 将其映射到接受DateTime
  • 的UDF(仅限LINQ-to-SQL)

第一个可能更容易......如果你遇到问题而没有识别System.DateTime.Now.Month,那么先将它做成变量。

答案 2 :(得分:0)

这只是检查月份是否大于当月,因此1776年7月4日将过去。我想你想查看整个日期?这样做:

    var q = (from d in data.DateDetails
             where d.Activate == 1 && d.EndDate > DateTime.Now) 
             orderby d.Date.Date.Month descending
             select new DateItem
             {
                 Title = d.Title,
                 Date = d.Date.Date + " - " + d.EndDate.Date,
                 Link = d.Link,
             }).Take(3);

其他几点:

        if (month < System.DateTime.Now.Month)
        {
            return true;
        }
        else if (month == System.DateTime.Now.Month)
        {
            return true;
        }
        else
        {
            return false;
        }

与以下相同:   return month&gt; = System.DateTime.Now;

我应该说几乎一样,因为你不必两次调用DateTime.Now,你可能会得到单独的值。调用DateTime.Now一次并将其放在一个变量中,以确保您始终检查同一时间。

答案 3 :(得分:0)

使用此方法将两个日期相互比较。它与DateTime.Compare几乎一样,但是对于日期字符串。

    /// <summary>
    /// This lets you compare two dates (dd/MM/yyyy) - the first against the second - 
    /// returning an integer specifying the relation between the two.
    /// If 1, then the first date is greater than the second; 
    /// if 0, then the first date is equal to the second; 
    /// if -1, then the first date is less than the second.
    /// </summary>
    /// <param name="Date1">The first date in string format: dd/MM/yyyy</param>
    /// <param name="Date2">The second date in string format: dd/MM/yyyy</param>
    /// <returns>
    /// 1 : The first date is greater than the second. 
    /// 0 : The first date is equal to the second. 
    /// -1 : The first date is less than the second.
    /// </returns>
    public int CompareDates(string Date1, string Date2)
    {
        try
        {
            string separator_value = "/";

            string[] date1_parts = Date1.Split(separator_value.ToCharArray());
            string[] date2_parts = Date2.Split(separator_value.ToCharArray());

            // 0 : Day
            // 1 : Month
            // 2 : Year

            if (string.CompareOrdinal(date1_parts[2], date2_parts[2]) > 0)
            {
                return 1;
            }
            else if (date1_parts[2] == date2_parts[2])
            {
                if (string.CompareOrdinal(date1_parts[1], date2_parts[1]) > 0)
                {
                    return 1;
                }
                else if (date1_parts[1] == date2_parts[1])
                {
                    if (string.CompareOrdinal(date1_parts[0], date2_parts[0]) > 0)
                    {
                        return 1;
                    }
                    else if (date1_parts[0] == date2_parts[0])
                    {
                        return 0;
                    }
                    else
                    {
                        return -1;
                    }
                }
                else
                {
                    return -1;
                }
            }
            else
            {
                return -1;
            }
        }
        catch (Exception)
        {
            return -1;
        }
    }

以下是三个示例,展示了三种有效的验证形式:

// Is Date-1 greater than Date-2?
if (CompareDates("17/07/2019", "14/07/2019") > 0) // Returns true.
    return true;
else
    return false;

// Is Date-1 less than Date-2?
if (CompareDates("17/07/2019", "14/07/2019") < 0) // Returns false.
    return true;
else
    return false;

// Is Date-1 equal to Date-2?
if (CompareDates("17/02/2019", "14/07/2019") == 0) // Returns false.
    return true;
else
    return false;