Linq查询按日期过滤(月份和年份)

时间:2013-05-08 13:39:12

标签: asp.net-mvc-3 linq lambda

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。 有没有人知道如何查询上述情况?

3 个答案:

答案 0 :(得分:11)

看起来你应该可以这样做:

// 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);
}

我将yearmonth拆分为单独的参数,因为这就是描述它们的方式 - 如果你真的想要能够处理“01/2013 “你可能希望只用'/'拆分并首先将每个部分解析为整数。 (或者,将其解析为特定格式的日期,然后从中获取年份和月份。)

编辑:请注意,将每个值格式化为字符串是没有意义的,并且可能不正确,除非您小心。 (例如,除非您明确指定文化,否则如果在模式中使用/,您将获得当前文化的日期分隔符,这可能不是您所期望的。)

您实际上并没有尝试匹配字符串模式 - 您正在尝试测试日期的年份和月份。这就是上面代码清楚表达的内容。字符串格式是无关紧要的。

答案 1 :(得分:0)

我突然解决了以下问题:

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 :(得分:0)

这只适用于月份和年份

 List<eTransaction> lsttrans = db.eTransactions.Where(c => c.SchemeID == scid && 
    c.DateOfPay.Value.Month == month && c.DateOfPay.Value.Year == year).ToList();