我试图用布尔值检查我的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();
}
任何了解不同方式的人?
答案 0 :(得分:25)
你想做什么?根据您的文本,您想知道给定日期是今天还是更晚,但代码示例仅比较月份(这意味着今年6月与去年6月相同)。如果您想比较日期(包括年和日),这种比较将为您完成工作:
yourDate.Date >= DateTime.Now.Date
答案 1 :(得分:0)
这里的提供商是什么? LINQ到SQL?对象?实体框架? (从名称来看,它看起来像LINQ-to-SQL ......)
实际上,数据库提供商将无法处理您的方法;你有几个选择:
&& d.EndDate.Month >= System.DateTime.Now.Month
DateTime
第一个可能更容易......如果你遇到问题而没有识别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;