我有很多班需要从Save()的数字字段中计算 max + 1 个数字。而且它在所有类中的名称都相同。
是否有任何方法可以实现(通用)方法,因此无论何时需要计算最大Id,我都可以始终调用它而无需复制代码?总是相同的数字字段,并且涉及不同的类。
数据库是MS SQL。
或者有没有C#方法可以做到这一点?也许是Linq?
编辑: 这不是来自数据库的ID字段。
编辑2: 用户可以在此字段中手动输入一些数字。如果没有,我的程序应为其计算max + 1。
答案 0 :(得分:0)
您可以在定义了int Id
属性的基类上定义此类方法。
将其标记为受保护,以允许子类访问它。
但是,除非您使用不同类型的Id
,否则它不必是通用的。如果这样,那么您将需要实现abstract protected TId GetNext(TId)
函数,每次需要下一个值时都将调用该函数。
但是,这是错误的方法。您最好依靠数据库来实现。唯一的例外-是您不需要+1
不为某些新实例生成新的ID,但是您的业务领域需要它(我认为这几乎是不可能的)。所以-不要这样做,要依靠您使用的数据库。
答案 1 :(得分:-1)
如果所有类均具有Id
属性,则可以创建接口public interface IEntity { int Id {get;set;} }
,然后只需调用listOfStuff.Cast<IEntity>().Max(entity => entity.Id);
您需要注意,如果listOfStuff
为空,则此操作将失败。您必须使用DefaultIfEmpty
之类的方法来防范这种情况。