如何每天影响某个变量C#asp.net

如何每天影响某个变量C#asp.net,c#,asp.net,C#,Asp.net,我有一个数据库,里面有一些价格。例如,我有牛奶=1欧元。 我希望价格不要修改超过或低于10%。因此,在这种情况下,您只能将价格设置在0.90或1.10之间。这很容易做到,但是,当价格被修改时,用户可以立即再次修改它。(如果他将其设置为0.9,那么他可以将其设置为0.81和0.99之间,依此类推……)因此我想在一个变量中影响价格,例如每天上午9点,因此一天内价格变化不能超过或低于10% DataClassesDataContext db = new DataClassesDataContext()

我有一个数据库,里面有一些价格。例如,我有牛奶=1欧元。 我希望价格不要修改超过或低于10%。因此,在这种情况下,您只能将价格设置在0.90或1.10之间。这很容易做到,但是,当价格被修改时,用户可以立即再次修改它。(如果他将其设置为0.9,那么他可以将其设置为0.81和0.99之间,依此类推……)因此我想在一个变量中影响价格,例如每天上午9点,因此一天内价格变化不能超过或低于10%

DataClassesDataContext db = new DataClassesDataContext();

List<ARTICLE> article = db.ARTICLE.ToList();

for (int i = 0; i < article.Count; i++)
{
    switch (article[i].Name)
    {
        case "Milk":
            if (decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) <= 
                (article[i].Price/ 10) * 11 && decimal.Parse(Milk.Text,
                 CultureInfo.InvariantCulture) >= (article[i].Price/ 10) * 9)
            {
                if (decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) != article[i].Price)
                {
                    article[i].Price= decimal.Parse(Milk.Text, CultureInfo.InvariantCulture);
                }
            }
            break;
        case "Other thing":
            //... etc
     }
}
DataClassesDataContext db=newdataclassesdatacontext();
List article=db.article.ToList();
for(int i=0;i
所以您想:

  • 保存每天的起始价格
  • 允许用户在N%的阈值内更改当天的价格
  • 允许用户每天多次更改价格(以修正修正,或在总差异
然后在更改每日价格后,检查其与基准价格的差异是否不超过N%

要解决这个问题,您需要使用三列:
DailyPrice
CurrentPrice
PriceModified
。然后在编辑价格时:

if (record.PriceModified.Date != DateTime.Now.Date)
{
    // First edit for today. 
    if (PriceWithinChangeThreshold(formData.NewPrice, record.CurrentPrice))
    {       
        // Save the old price as the new start price for today
        record.DailyPrice = record.CurrentPrice;
        record.CurrentPrice = formData.NewPrice;
        record.PriceModified = DateTime.Now;
    }
}
else
{
    // This price has already been edited today.
    if (PriceWithinChangeThreshold(formData.NewPrice, record.DailyPrice))
    {
        // But it's within the threshold for today
        record.CurrentPrice = formData.NewPrice;
        record.PriceModified = DateTime.Now;
    }   
}
但正如评论中所讨论的,将价格保存为十进制列通常是个坏主意。想想(历史)报告、发票、税收、货币等等:“产品价格”不仅仅是一个数字。因此,我建议以完全不同的方式存储您的价格。有关详细信息,请参见。

因此您希望:

  • 保存每天的起始价格
  • 允许用户在N%的阈值内更改当天的价格
  • 允许用户每天多次更改价格(以修正修正,或在总差异
然后在更改每日价格后,检查其与基准价格的差异是否不超过N%

要解决这个问题,您需要使用三列:
DailyPrice
CurrentPrice
PriceModified
。然后在编辑价格时:

if (record.PriceModified.Date != DateTime.Now.Date)
{
    // First edit for today. 
    if (PriceWithinChangeThreshold(formData.NewPrice, record.CurrentPrice))
    {       
        // Save the old price as the new start price for today
        record.DailyPrice = record.CurrentPrice;
        record.CurrentPrice = formData.NewPrice;
        record.PriceModified = DateTime.Now;
    }
}
else
{
    // This price has already been edited today.
    if (PriceWithinChangeThreshold(formData.NewPrice, record.DailyPrice))
    {
        // But it's within the threshold for today
        record.CurrentPrice = formData.NewPrice;
        record.PriceModified = DateTime.Now;
    }   
}

但正如评论中所讨论的,将价格保存为十进制列通常是个坏主意。想想(历史)报告、发票、税收、货币等等:“产品价格”不仅仅是一个数字。因此,我建议以完全不同的方式存储您的价格。请参阅。

您可以保存上次修改日期时间,并在每次更改时对其进行验证。

您可以保存上次修改日期时间,并在每次更改时对其进行验证。

您可以在所有
文章中引入
lastModified
-成员。因此,您知道您是否可以修改当前产品:

class Article
{
    DateTime LastModified { get; set; }
}

...

foreach(var article in articles)
{
    var timespan = DateTime.Now - article.LastModified;
    if(timeSpan.TotalDays >= 1) ...
}

您可以在所有
文章
中引入
lastModified
-成员。因此,您知道您是否可以修改当前产品:

class Article
{
    DateTime LastModified { get; set; }
}

...

foreach(var article in articles)
{
    var timespan = DateTime.Now - article.LastModified;
    if(timeSpan.TotalDays >= 1) ...
}
在表中创建一个类似“LastModified”的列作为DateTime。检查“LastModified”的日期和月份是否与今天的日期不一致后,启用按钮进行修改

它不能在应用程序本身中完成,或者您需要在服务器上运行的东西,您可以使用Web服务或其他任何东西进行查询

如果无法修改表,可能会创建一个带有上次修改日期的本地文件,但用户可以修改它,因此请小心。

在表中创建一个类似“lastmedited”的列作为日期时间。检查“LastModified”的日期和月份是否与今天的日期不一致后,启用按钮进行修改

它不能在应用程序本身中完成,或者您需要在服务器上运行的东西,您可以使用Web服务或其他任何东西进行查询


如果无法修改该表,则可能会创建一个带有上次修改日期的本地文件,但用户可以修改该文件,因此请小心。

一个可能的解决方案是添加一个
价格历史记录

然后,无论何时保存价格,都要检查新价格是否有效(如果有效),并向
PriceHistory
表中添加一条记录

支票的格式如下:

SELECT TOP 1 MostRecentPrice
FROM PriceHistory
WHERE Item = 'Milk' and PriceDateTime < 'Today's Date (with midnight as the time)'
ORDER BY PriceDateTime DESC
选择最高价前1名
来自历史
其中Item='Milk'和PriceDateTime<'今天的日期(以午夜为时间)'
按价格日期时间描述订购
然后验证您正在保存的新价格是否在
MostRecentPrice
的10%以内。此外,请确保您处理了没有最近价格的场景(即,这是您第一次为项目保存价格)

它的另一个优点是,它不仅解决了您当前的问题,而且随着时间的推移,它还会为您提供有价值的信息。“三周前牛奶的价格是多少?”诸如此类的事情


此外,您可以简单合理地更改验证规则-例如,您可以说“每天10%或每周20%的价格变化”,如果不存储完整的历史记录,您就无法轻松地更改这些规则。

一个可能的解决方案是添加一个
价格历史记录表

然后,无论何时保存价格,都要检查新价格是否有效(如果有效),并向
PriceHistory
表中添加一条记录

支票的格式如下:

SELECT TOP 1 MostRecentPrice
FROM PriceHistory
WHERE Item = 'Milk' and PriceDateTime < 'Today's Date (with midnight as the time)'
ORDER BY PriceDateTime DESC
选择最高价前1名
来自历史
其中Item='Milk'和PriceDateTime<'今天的日期(午夜为th