我试图显示去年的记录,但没有显示任何结果。
如果我删除下面显示的代码,那么它会显示所有结果。
这是我正在使用的代码:
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();
我不知道我在这里做错了什么,任何帮助都会很棒! - 谢谢:)
答案 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可以通过文化产生不同的结果)