根据最大值插入具有字段值的记录
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。以上是关于根据最大值插入具有字段值的记录的主要内容,如果未能解决你的问题,请参考以下文章
获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)