Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证以确保日期不在现有日期之间或与现有日期重叠_C#_Validation_Datetime - Fatal编程技术网

C# 验证以确保日期不在现有日期之间或与现有日期重叠

C# 验证以确保日期不在现有日期之间或与现有日期重叠,c#,validation,datetime,C#,Validation,Datetime,基本上我有一个报价,有效期从和有效日期 例如:2012年2月1日至2012年2月3日 当我添加一个新的报价时,我需要确认该报价是否有效,以确保该报价不在上述现有报价的范围内或与之重叠 我目前的代码如下: // Obtain the current list of coupons associated to the retailer. List<RetailerCoupon> retailerCoupons = PayPalInStore.Data.RetailerCoupon.Fin

基本上我有一个报价,有效期从和有效日期

例如:2012年2月1日至2012年2月3日

当我添加一个新的报价时,我需要确认该报价是否有效,以确保该报价不在上述现有报价的范围内或与之重叠

我目前的代码如下:

// Obtain the current list of coupons associated to the retailer.
List<RetailerCoupon> retailerCoupons = PayPalInStore.Data.RetailerCoupon.Find(x => x.RetailerId == RetailerId).ToList();

// Loop through each coupon and see if the timeframe provided in the NEW coupon doesnt fall between any EZISTING coupon.
if (retailerCoupons != null)
{
    foreach (RetailerCoupon coupon in retailerCoupons)
    {
        DateTime retailerCouponValidFrom = coupon.DateValidFrom;
        DateTime retailerCouponValidTo = coupon.DateExpires;

        if (DateTime.Compare(retailerCouponValidFrom, ValidFrom) < 0 && DateTime.Compare(retailerCouponValidTo, ValidTo) > 0)
        {
            return true;
        }

        if (retailerCouponValidFrom == ValidFrom && retailerCouponValidTo == ValidTo.AddHours(23).AddMinutes(59).AddSeconds(59))
        {
            return true;
        }
    }
}

return result;

虽然这不起作用,但有人能帮我吗?

在确定开始和结束日期是包含日期还是独占日期后,检测重叠的通常方法是比较所考虑的两个范围的相对端

您需要询问范围1是否在范围2结束之前开始?范围2是否在范围1结束之前开始?。如果这两个问题都得到了肯定的回答,那么你就有了重叠

从您当前的代码中,我不清楚端点是包含的还是独占的,因此我不会尝试发布实际代码。

1我认为RetailerGroupons不能为空


2为什么要使用DateTime.Comparet1,t2<0,因为你可以写t1而不是直接回答你的问题,而是一个谈论我最喜欢的库之一的机会:for.NET。阅读这篇文章会给你一些关于如何处理你的情况的提示。

使用linq怎么样

var overlaps=retailerCoupons.Any(c=> c.DateValidFrom <= ValidTo && c.DateExpires >= ValidFrom);

你说这不起作用是什么意思?调试器是怎么说的?哪些变量/条件不符合预期?请显示所有相关代码。。。在哪里声明结果变量?
var overlaps=retailerCoupons.Any(c=> c.DateValidFrom <= ValidTo && c.DateExpires >= ValidFrom);
result= !overlaps;