如何使用c#linq检查具有时间跨度的两个日期之间的差异是否恰好为1年?

时间:2017-04-24 11:15:29

标签: c# linq

我正在获取数据列表并使用linq我将其转换为我想要的模型。

以下是我的示例代码:

    public JsonResult GetDataList([DataSourceRequest] DataSourceRequest request)
    {
        List<string> errorMessages = new List<string>();
        List<Model> ModelList = new List<Model>();
        try
        {
            Services.ServiceClient ServiceClient = new Services.ServiceClient();
            ModelList = ServiceClient.GetAllData().Select(x => new Model
            {
                ID = x.ID,
                Name = x.Name,
                Description = x.Description,
                Category = x.Category,
                DtActive = x.DtActive,
                DtExpire = x.DtExpire,                
                IsLive = ((x.DtActive.Value.Date < DateTime.Now.Date) && (x.DtExpire == (x.DtActive.Value.AddYears(1)))) ? true : false
            }).ToList();

            if (ServiceClient.ResponseStatus == RestClientHelper.ResponseCode.FAILUER)
            {
                errorMessages.Add(ServiceClient.ResponseMessage);
            }
        }
        catch (Exception ex)
        {
            errorMessages.Add(ex.Message);
        }

        if (errorMessages.Count == 0)
        {
            return Json(ModelList.AsEnumerable().ToDataSourceResult(request));
        }
        else
        {
            return Json(new { Data = ModelList.AsEnumerable().ToDataSourceResult(request), Errors = errorMessages });
        }
    }

所以一切都会好起来但是当我试图根据条件设置“IsLive”字段时,它总是会变错。

我希望只有当“DtActive”小于今天的日期并且“DtExpiry”比“DtActive”大1年时才设置为“true”。

任何人都可以帮助我。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

为了测试这个,我在一年前的昨天和昨天做了2个日期。然后比较它们就像这样完美地运作:

DateTime dtActive = DateTime.Now.AddDays( -1 );//Yesterday
DateTime dtExp = DateTime.Now.AddYears( 1 ).AddDays( -1 );//Last year yesterday

if ( dtActive.Date < DateTime.Now.Date && dtExp.AddYears( -1 ).Date == dtActive.Date )
{
    //Success
}