c#:获取实体的最后一个id(LINQ2SQL)

时间:2011-10-27 07:16:02

标签: c# linq-to-sql entity-framework-4

我看了一下stackoverflow,找到了我的问题的答案。 所有我发现的是:Get Last ID From The table [ Entity Framework ]

这正是我所需要的..但​​是这个问题没有答案..似乎问这个问题的人没有解释他为什么需要它。

我正在为我的公司编写票务系统。

现在,如果某人创建了一张票,我希望他不要自己输入票证ID(票号#)。我想要一个启用= false的文本框。它应该自动填充新的票证ID(它必须是最后的票证ID + 1)。

这就是为什么我要寻找我的实体的最后一个ID。

我尝试了这个:

var ticketNrQuery = (from tn in kdVerwaltung.Ticket
                     orderby tn.Ticket_ID
                     select tn).Last();
textBoxTicketNr.Text = (ticketNrQuery.Ticket_ID + 1).ToString();

在这个示例中,我得到了一个不受支持的异常(什么地狱)。

我的问题的任何解决方案?

2 个答案:

答案 0 :(得分:2)

您可以使用MAX(),因为它可以转换为SQL:

var maxTicketId = kdVerwaltung.Ticket.Max(x => x.Ticket_ID) + 1;

这将被翻译成以下查询:

SELECT MAX([t0].Ticket_ID) as [value] FROM [dbo].[YourTable] AS [t0]

如果您打算在生产中使用它,您应该对此进行分析。如果你有很多行,那么使用MAX可能会非常慢。

答案 1 :(得分:1)

        Int32? newID = (from ticket in kdVerwaltung.Ticket select (int?)ticket.ID).Max();
        newID = newID.HasValue ? newID.Value + 1 : 1;