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