C# 如果ID键不一致,如何获取IEnumerable/IQueryable中的下一个对象?
在我当前的应用程序上进行了更多的黑客攻击之后,我又一次遇到了一个问题,这个问题扼杀了我对我的域模型的一些期待 这里的问题是,C# 如果ID键不一致,如何获取IEnumerable/IQueryable中的下一个对象?,c#,linq-to-sql,collections,.net-4.0,c#-4.0,C#,Linq To Sql,Collections,.net 4.0,C# 4.0,在我当前的应用程序上进行了更多的黑客攻击之后,我又一次遇到了一个问题,这个问题扼杀了我对我的域模型的一些期待 这里的问题是,聚合根/我的域模型中最重要的类的条目没有一致的ID值。 (例如混乱:1..3..5..12..150..157..等等|这是因为该数据库自MS Access 1997年以来一直在更新,现在升级到MSSQLServer) 是否仍有办法在当前集合中获取real next对象(这意味着它不仅仅基于其ID值) 在这种情况下你们会建议我怎么做 这是一个好主意: 是否删除ID字段并重
聚合根
/我的域模型中最重要的类的条目没有一致的ID值。
(例如混乱:1..3..5..12..150..157..
等等|这是因为该数据库自MS Access 1997年以来一直在更新,现在升级到MSSQLServer)
是否仍有办法在当前集合中获取real next
对象(这意味着它不仅仅基于其ID值)
在这种情况下你们会建议我怎么做
这是一个好主意:
- 是否删除ID字段并重新生成
- 创建一些HelperMethods以获取当前视图中的下一个对象?(你将如何做到这一点?)
var query = db.Root.OrderBy( r => r.ID );
foreach (var obj in query)
{
....
}
例2:
var query = db.Root.Where( (r,i) => db.Root.ElementAt(i).Name == r.Name );
...
不过有一个小问题:我如何确定I在(r,I)中的位置。我有一个IEnumerable,我的代码现在就通过它进行迭代。我是否应该在ViewModel中创建一个字段,并在每次迭代时设置它?(int ItemNr)?为什么需要知道集合在ViewModel中的位置?我认为您应该将该项的ID存储在ViewModel中,只需通过ID来检索它:
db.Root.SingleOrDefault(r=>r.ID==ID)
或者对于链接到下一项的模型集合db.Root.Where((r,I)=>new RootModel{ID=r.ID,NextID=db.Root.ElementAt(I+1)!=null?db.Root.ElementAt(I+1).ID})