根据最大值插入具有字段值的记录

Posted

技术标签:

【中文标题】根据最大值插入具有字段值的记录【英文标题】:Insert record having field value based on the max value 【发布时间】:2020-01-14 02:18:05 【问题描述】:

我有一个遗留的 sql,它基本上用这样的子查询插入记录

INSERT INTO invoice (invno, otherfields ) 
VALUES ( (SELECT Max(invno)+1 AS maxinvno FROM invoices) , othervalues )

我正在尝试在 C# 的 NHibernate 中实现相同的功能。

我的问题是:

是否可以避免使用 SQL/HQL 查询并改用 LINQ NHibernate 样式。如果可能的话 - 怎么做?

例如:

Invoice invoice = new Invoice();
invoice.invno = ...
session.save

更新:删除 linq 参考 更新:添加了想要结果的 sn-p

【问题讨论】:

你不能使用自动编号/数据库控制的递增的东西,比如序列? 答案是肯定的。尝试通过此链接阅读第 18.6 节nhibernate.info/doc/nhibernate-reference/querylinq.html @CaiusJard 设计是多年前制作的,不可更改 @Christos,来自这篇文章,看到了 InsertBulder 等。无法弄清楚如何实现目标。 【参考方案1】:

***** 在 linq 你可以试试这个*****

 using (AccountingDbContext dbContext = new AccountingDbContext())
        
            Transaction objEmp = new Transaction();
            objEmp.VoucherNo = ((from  transction in dbContext.Transactions
                               select transction.Id).Max() + 1).ToString();
            objEmp.TransactionType = "Payment";
            dbContext.Transactions.Add(objEmp);
            dbContext.SaveChanges();
        

【讨论】:

那里发生了一些狡猾的大写;你能复习一下吗? @neamulislam 谢谢你的回答。我对此感到困惑,但经过短暂浏览后,我意识到这是纯粹的 LINQ,这意味着我的问题没有被正确提出。我的目标是链接 NHibernate 风格的方法。我不确定如何在我当前的环境中使用你的 sn-p。

以上是关于根据最大值插入具有字段值的记录的主要内容,如果未能解决你的问题,请参考以下文章

在其中一个联接上选择具有最大值的记录

获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)

在哈希表中找到最大值,然后打印具有该值的所有变量(在C中)

如何在不修改数据库模式的情况下仅使用 PL/SQL 更新具有大值的 CLOB?

LINQ - 选择每组具有最大属性值的记录

怎么用mysql查询全表最大字段值的数据?