仅选择本月的记录

时间:2014-02-17 13:40:35

标签: c# asp.net-mvc datetime

List<ActionPerformed> EndOfMonthPLUs = new List<ActionPerformed>();
List<ActionPerformed> AllPLUs = db.ActionPerformeds.ToList();

foreach (ActionPerformed ap in AllPLUs)
{
    if (ap.File_Name == "PLU" && ap.Status == "Processed" && ap.Date == ??)
    {
        EndOfMonthPLUs.Add(ap);
    }
}

我还想添加另一个查询:&amp;&amp; ap.Date ==获取本月的所有文件。 所以我有string date = todaysDate.ToString("MMMM, yyyy");

现在怎么办?

4 个答案:

答案 0 :(得分:2)

假设ap.DateDateTime,您可以检查月份和年份是否相同:

var now = DateTime.Now;

foreach (ActionPerformed ap in AllPLUs)
{
    if (ap.File_Name == "PLU" 
        && ap.Status == "Processed" 
        && ap.Date.Month == now.Month 
        && ap.Date.Year == now.Year)
    {
        EndOfMonthPLUs.Add(ap);
    }
}

答案 1 :(得分:1)

将Date上的Month和Year属性与当前DateTime的属性进行比较:

var AllPLUs = db.ActionPerformeds.ToList();
var now = DateTime.Now;

var EndOfMonthPLUs = AllPLUs
    .Where(ap => 
        ap.File_Name == "PLU" && 
        ap.Status == "Processed" && 
        ap.Date.Month == now.Month && 
        ap.Date.Year == now.Year)
    .ToList();

我认为&#34; db&#34;变量是指实体框架上下文。如果是这样,如果您对包含所有PLU的列表没有任何进一步的要求,您可能希望在EF查询中执行部分或全部此过滤。

答案 2 :(得分:0)

如果我没有遗漏某些内容,并且您的 ap.Date 属性是DateTime,您可以这样做吗?

foreach (ActionPerformed ap in AllPLUs)
        {
            if (ap.File_Name == "PLU" && ap.Status == "Processed" && 
                ap.Date.Month == DateTime.Today.Month)
            {
                EndOfMonthPLUs.Add(ap);
            }
        }

答案 3 :(得分:0)

我认为

ap.Date.ToString("MMMM, yyyy") == date

是你正在寻找的答案......替代品可能是

ap.Date.Month == DateTime.Now.Month && ap.Date.Year == DateTime.Now.Year

或者由于您正在使用实体,因此可以应用linq查询

var aps = from ap in AllPLUs
where ap.File_Name == "PLU"
&& ap.Status == "Processed"
&& ap.Date.Month == DateTime.Now.Month
&& ap.Date.Year == DateTime.Now.Year
select ap

然后

foreach(ActionPerformed ap in aps) { }