Linq查询按日期筛选(月份和年份)
问题描述:
public class content
{
public int Id { get; set; }
public string name { get; set; }
public DateTime date { get; set; }
}
Id name date
1 content1 01/01/2013
2 content2 05/01/2013
3 content3 05/03/2013
4 content4 01/06/2013
5 content5 10/03/2012
6 content6 01/01/2012
我想如果查询通过'01/2013',查询应返回内容ID 1,2。 有没有人知道如何查询上面的情况?Linq查询按日期筛选(月份和年份)
答
看起来你应该能够做到:
// Type and property names changed to match .NET conventions
public IEnumerable<Content> GetContents(int year, int month)
{
return db.Contents // Or wherever you're getting data from
.Where(c => c.Date.Year == year && c.Date.Month == month);
}
我已经打出了year
和month
作为单独的参数,因为这是你如何描述他们 - 如果你真的希望能够处理“01/2013”你可能只想分割'/'
并首先将每个片段解析为一个整数。 (或者,将其解析为特定格式的日期,然后从中取出年份和月份。)
编辑:请注意,将每个值格式化为字符串是毫无意义的,并且可能不正确,除非您小心。 (例如,除非明确指定文化,否则如果在模式中使用/
,则会得到当前文化的日期分隔符,这可能不是您所期望的。)
您实际上并未尝试匹配一个字符串模式 - 您正在尝试测试日期的年份和月份。这就是上面的代码清楚地表达的。字符串格式化是无关紧要的。
答
我突然摸索出象下面这样:
public IEnumerable<Content> GetContents(string date) /* E.G: date = '07/2013' */
{
return db.Contents // Or wherever you're getting data from
.Where(c => c.Date.ToString("MM/yyyy") == date);
}
那是正确的方法呢?
+2
“这是正确的做法吗?” - 在我看来,不是。你不是在逻辑上执行字符串比较;你正在执行一个月和一年的比较。因此,首先将输入数据转换为月份和年份,然后使用这些值比较每个元素的月份和年份。 – 2013-05-08 15:08:44
答
这是只飞蛾和年
List<eTransaction> lsttrans = db.eTransactions.Where(c => c.SchemeID == scid &&
c.DateOfPay.Value.Month == month && c.DateOfPay.Value.Year == year).ToList();
它是LINQ2SQL,Linq2Objects,Linq2Entities是否正确? - 更多细节,请! ;-) – 2013-05-08 13:40:22