使用实体框架仅按日期对行进行计数,而无需时间

时间:2018-06-30 16:28:24

标签: c# entity-framework

仔细检查CountEmailChart。在这里,我输入DateTime,它是带时间的完全格式化日期。但是问题是我只想比较下面的实体框架上的日期而不是时间来计算行数。谁能告诉我该怎么做?

控制器代码:

public int CountEmailChart(DateTime date, int campaignID)
{
    int count = dbcontext.CampaignEmails
                         .Count(x => x.DateSigned == date && x.CampaignID == campaignID);
    return count;
}

2 个答案:

答案 0 :(得分:1)

Karan的答案是正确的,但结果查询将不为DateSigned使用索引。如果存在这样的索引(或CampaignID和DateSigned列的组合索引),则您可能更喜欢这种方法:

var startDate = date.Date;
var endDate = date.Date.AddDay(1);
int count = dbcontext.CampaignEmails.Count(x => x.CampaignID == campaignID && x.DateSigned >= startDate && x.DateSigned < endDate);

答案 1 :(得分:0)

尝试这样。 .Date对象的DateTime属性将仅返回日期部分。

如果您使用的是Entity Framework 6,那么。

date = date.Date;
int count = dbcontext.CampaignEmails.Count(x => DbFunctions.TruncateTime(x.DateSigned) == date.Date && x.CampaignID == campaignID);

其他

date = date.Date;
int count = dbcontext.CampaignEmails.Count(x => EntityFunctions.TruncateTime(x.DateSigned) == date.Date && x.CampaignID == campaignID);