无法在去年显示记录

时间:2014-07-24 08:34:58

标签: c# date

我试图显示去年的记录,但没有显示任何结果。

如果我删除下面显示的代码,那么它会显示所有结果。

这是我正在使用的代码:

var trackFilter = Convert.ToString(DateTime.Now.AddDays(-365));

DateTime fromDate = DateTime.Now.AddDays(-365);
DateTime toDate = DateTime.Now;

daa = daa.Where(c => (trackFilter == "" ||
                c.TrackName.ToLower().Contains(trackFilter.ToLower()))
                &&
                (fromDate == DateTime.MinValue || fromDate <= c.Date)
                &&
                (toDate == DateTime.MaxValue || c.Date <= toDate)
                ).ToList();

我不知道我在这里做错了什么,任何帮助都会很棒! - 谢谢:)

4 个答案:

答案 0 :(得分:0)

只是想一想......如果你想要检索去年的日期,你提供了错误的标准,因为你要从当前日期减去365,实际上你应该按照&#34; YEAR&#进行过滤34;日期部分。如果你想从上一年获得记录,你的查询应该是这样的......

int lastYear = DateTime.Now.AddYears(-1).Year;

daa = daa.Where(c => (trackFilter == "" ||
                c.TrackName.ToLower().Contains(trackFilter.ToLower()))
                &&
                c.Date.Year == lastYear).ToList();

此表达式fromDate == DateTime.MinValue对我没有意义,因为fromDate显然永远不会等于MinValue DateTime,因为您只需减去365从当前日期开始的几天

答案 1 :(得分:0)

如果您只想要包含前几年的名字,可以尝试:

daa = daa.Where(c => c.TrackName.Contains(DateTime.Now.Year - 1)).ToList();

所有其他比较都是不必要的。

答案 2 :(得分:0)

尝试:

var trackFilter = Convert.ToString(DateTime.Now.AddDays(-365));

DateTime fromDate = DateTime.Now.AddDays(-365);
DateTime toDate = DateTime.Now;

daa = daa.Where(c => (c.Date > fromDate.Date && c.Date <= toDate.Date)).ToList();

那应该会给你你所追求的日期文件管理器。

然后,一旦你知道它正常工作,你可以添加回来:

(trackFilter == string.Empty || c.TrackName.ToLower().Contains(trackFilter.ToLower()))

对于具有最小或最大日期部分的位,我可能会考虑以下内容:

(c.Date == DateTime.MinValue || c.Date==DateTime.MaxValue ||
(c.Date > fromDate.Date && c.Date <= toDate.Date))

我不喜欢像这样进行Min或Max值搜索的想法,因为我相信DateTime.Min与SQL实际可能包含的内容不同。

答案 3 :(得分:0)

如果我必须找到错误,我首先要检查trackFilter字符串的内容是否与您在c.TrackName中使用的datetimeformat不同。 (string.format可以通过文化产生不同的结果)