C# 多个类的最大Id字段的通用方法

C# 多个类的最大Id字段的通用方法,c#,linq,C#,Linq,我有很多类,我需要从Save()的numeric字段中计算max+1数字。它在所有类中都有相同的名称 是否有任何方法可以实现(通用)方法,以便在需要计算max Id时随时调用它而不必重复代码?它总是相同的数值字段,并且涉及不同的类 数据库是MS SQL 或者有什么c#方法可以做到这一点?林克:也许吧 编辑: 它不是DB中的Id字段 编辑2: 用户可以在此字段中手动输入一些数字。如果不是,我的程序应该为它计算最大+1个数。您可以在基类中定义此类方法,其中定义了int Id属性。 将其标记为受保护,

我有很多类,我需要从Save()的numeric字段中计算max+1数字。它在所有类中都有相同的名称

是否有任何方法可以实现(通用)方法,以便在需要计算max Id时随时调用它而不必重复代码?它总是相同的数值字段,并且涉及不同的类

数据库是MS SQL

或者有什么c#方法可以做到这一点?林克:也许吧

编辑: 它不是DB中的Id字段

编辑2:
用户可以在此字段中手动输入一些数字。如果不是,我的程序应该为它计算最大+1个数。

您可以在基类中定义此类方法,其中定义了
int Id
属性。 将其标记为受保护,以便允许子类访问它。 但是,除非您使用不同类型的
Id
,否则它不需要是通用的。如果是这样,则需要实现
abstract protected TId GetNext(TId)
函数,该函数将在每次需要下一个值时调用


然而,这是一条错误的道路。您最好依靠数据库来实现这一点。唯一的例外是,您需要
+1
不为某个新实例生成新id,但您的业务域需要它(我认为这几乎是不可能的)。所以-不要这样做,依赖于你使用的数据库。

如果你的类都有
Id
属性,你可以创建一个接口
public interface IEntity{int Id{get;set;}
然后调用
listofsuff.Cast().Max(entity=>entity.Id)


您需要注意,如果
listofsuff
为空,则此操作将失败。您必须使用类似于
DefaultIfEmpty

的方法来防范这种情况,后退一步,定义您的用例、模型结构等。“将1添加到整数的通用方法”是毫无意义的。你不能让
+1
++
更简单。提供有关该问题的更多上下文。@mjwills我使用基于EF的自定义框架。这是MS SQL数据库。@mjwills标识列用于PK,此字段类似于常规数字字段。我将编辑我的主要问题,我需要获取最大编号的不是Id标识字段。如果您坚持这一行,我强烈建议您在您要最大化的列上放置一个唯一索引,以处理不可避免的竞争条件。我现在将尝试使用此索引。