Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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排序列表并插入数据库_C#_List_Datetime_Sorting - Fatal编程技术网

C# c排序列表并插入数据库

C# c排序列表并插入数据库,c#,list,datetime,sorting,C#,List,Datetime,Sorting,我的程序完全停止了,我需要一些帮助 我得到了一个包含客户账单和账单日期的xml文件。此文件有大约4000个计费日期。我要做的是对它们进行排序,以便在2010-04-01-2011-03-31期间日期范围内的once添加到名为period1的表列中。其他日期则是第二阶段,即2011-04-01-2012-03-31 我一直在用不同的方法测试这个解决方案,但它不起作用。我正在将所有数据添加到名为日期的列表中。并尝试: if (dates.All(date => date >= start

我的程序完全停止了,我需要一些帮助

我得到了一个包含客户账单和账单日期的xml文件。此文件有大约4000个计费日期。我要做的是对它们进行排序,以便在2010-04-01-2011-03-31期间日期范围内的once添加到名为period1的表列中。其他日期则是第二阶段,即2011-04-01-2012-03-31

我一直在用不同的方法测试这个解决方案,但它不起作用。我正在将所有数据添加到名为日期的列表中。并尝试:

if (dates.All(date => date >= startDatePeriod1 && date <= stopDatePeriod1))
{
    adapterBonus.InsertPeriod1Query(// insert to database));
}
else if (dates.All(date => date >= startDatePeriod2 && date >= stopDatePeriod2))
{
    adapterBonus.InsertPeriod2Query(// insert to database));
}

startDatePeriod1 = 2010-04-01
stopDatePeriiod1 = 2011-03-31  

依此类推,你正在做的是: 检查是否所有日期都在第一个期间。如果是,请将它们插入数据库中的句点1。如果不是,请检查所有日期是否都在时段2内,并将其插入数据库中的时段2

您要执行以下操作:

foreach (var period1Date in dates.Where(date => date >= startDatePeriod1 && 
                                                date <= stopDatePeriod1))
{
    adapterBonus.InsertPeriod1Query(// insert period1Date to database));
}
foreach (var period2Date in dates.Where(date => date >= startDatePeriod2 && 
                                                date <= stopDatePeriod2))
{
    adapterBonus.InsertPeriod2Query(// insert period2Date to database));
}

顺便说一句:我修复了第二个条件中的错误。它应该是date=stopDatePeriod2

All返回一个布尔值,指定所有元素是否满足某个条件。你需要的是一个能从中提取你所需要的东西的地方

比如:

adapterBonus.InsertPeriod1Query(dates.Where(date => date >= startDatePeriod1 && date <= stopDatePeriod1));
adapterBonus.InsertPeriod2Query(dates.Where(date => date >= startDatePeriod2 && date <= stopDatePeriod2));
试试这个:

var period1Dates = dates.Where(date => date >= startDatePeriod1 && date <= stopDatePeriod1);
var period2Dates = dates.Where(date => date >= startDatePeriod2 && date >= stopDatePeriod2);

foreach(var date in period1Dates)
{                          adapterBonus.InsertPeriod1Query(// insert to database)); }

等等。

最简单的方法是做一个

startDatePeriod1 = 2010-04-01;
stopDatePeriod1 = 2011-03-01;   
startDatePeriod2 = 2011-04-01;
stopDatePeriod2 = 2012-03-01;

foreach(DateTime d in dates) {
    if (d => startDatePeriod1 && d <= startDatePeriod1) {
        adapterBonus.InsertPeriod1Query(// insert to database));
    } else if(d => startDatePeriod2 && d <= stopDatePeriod2) {
        adapterBonus.InsertPeriod2Query(// insert to database));

    }
}
如果序列中的每个元素都验证了条件,则Enumerable.All扩展方法返回true。如果dates在两个时段中都包含日期,则所有ifs都不会运行,因为对Enumerable.All的两个调用都将返回false

我不知道您所说的“添加到名为period1的表列”是什么意思,但如果您要计算每个时段中的所有日期,请使用Enumerable.count:


似乎您只需要对每个奖金周期进行简单的查询,例如

var period1Dates = date.Where(date => date >= startDate1 && date <= stopDate1);
var period2Dates = date.Where(date => date >= startDate2 && date <= stopDate2);

adapterBonus.InsertPeriod1(period1Dates);
adapterBonus.InsertPeriod2(period2Dates);

正如Daniel所说,您正在检查所有日期是否都在每个期间内,这听起来似乎永远不会是真的,因此不会发生任何事情。

添加到名为period1的表列是什么意思?增加列数?
var period1Dates = date.Where(date => date >= startDate1 && date <= stopDate1);
var period2Dates = date.Where(date => date >= startDate2 && date <= stopDate2);

adapterBonus.InsertPeriod1(period1Dates);
adapterBonus.InsertPeriod2(period2Dates);