【问题标题】:Enumerable Range to increase int by 1将 int 增加 1 的可枚举范围
【发布时间】:2016-01-14 11:48:09
【问题描述】:

每次在我的数据库/表中创建新行时,我都会使用 Enumerable.Range(1, 1).FirstOrDefault() 尝试将我的 MKCRFQ 数字增加 1。我正在使用 WCF 服务和 WPF 应用程序。

客户

using (MKCServiceClient service = new MKCServiceClient())
{
    await service.GetQuoteAsync(new QuoteData
    {
        ...
        MKCRFQ = Enumerable.Range(1, 1).FirstOrDefault(),
        ...
    });
}

服务

public QuoteResults CalculateResult(Database db, QuoteData data)
{
    var result = new QuoteResults
    {
        Successful = false,
        Data = data
    };

    var quote = new Quote
    {
        ...
        MKCRFQ = data.MKCRFQ,
        ...
    };

    result.Quote = quote;
    result.Successful = true;
    return result;
}

public void GetQuote(QuoteData data)
{
    using (Database db = new Database())
    {
        var result = CalculateResult(db, data);
        db.Quote.Add(result.Quote);
        db.SaveChanges();
    }
}

我的问题是,每次我插入新的数据行时,添加的每个新行的 MKCRFQ 数字都是 1,我不知道如何随着添加的每一行增加(+1)它。这可能看起来很简单,但我以前从未这样做过,也不知道怎么做。有人可以解释或告诉我这是如何完成的吗?

【问题讨论】:

  • Enumerable.Range(1, 1).FirstOrDefault(),真的吗?为什么不直接 1 :)
  • 你为什么期望Enumerable.Range(1, 1) 做你期望的事情?除了{ 1 } 之外,它永远不会返回任何其他内容,而不是每次调用它时递增的数字(尤其是在应用程序重新启动后)。如果您想获取数据库中当前的最大数量,请查询您的数据库以获取最大数量并将其增加一。
  • 那么,如果我只使用Enumerable.Range(1),我会得到我需要的结果吗? 0_o
  • 不,是什么让你这么认为?你试过阅读Enumerable.Range()'s documentation吗?该方法不会做你认为它做的事情,你需要编写代码来做你想做的事情。
  • MKCRFQ++; 增加1

标签: c# wpf linq wcf


【解决方案1】:

是的,我知道这不是一个好问题……但我自己想通了。它可能不是最好的编码或完整的证明,但它有效,我在这里发布这个给任何可能需要我如何做的参考的人:)

这是我的服务编码:

public void GetQuote(QuoteData data)
{
    using (Database db = new Database())
    {
        var result = CalculateResult(db, data);

        byte[] pdfByte = (result.Data.PDF);
        var pdf = new PDF { PDFbyte = pdfByte, CustomerId = result.Data.CustomerId };
        db.PDF.Add(pdf);

        //Here
        int rfqLast = (from x in db.Quote where x.MKCRFQ != null orderby x.Id descending select x.MKCRFQ).Take(1).SingleOrDefault();
        var rfqAdd = new Quote { MKCRFQ = rfqLast + 1 };

        result.Quote.MKCRFQ = rfqAdd.MKCRFQ;

        db.Quote.Add(result.Quote);
        db.SaveChanges();
    }
}

【讨论】:

  • 您可能想要选择MAX(MKCRFQ)。这可能恰好对应于MAX(ID),但不能保证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多