Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果ID键不一致,如何获取IEnumerable/IQueryable中的下一个对象?_C#_Linq To Sql_Collections_.net 4.0_C# 4.0 - Fatal编程技术网

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以获取当前视图中的下一个对象?(你将如何做到这一点?)

即使存在间隙,ID是否至少已排序?如果是这样,只需按id排序并迭代枚举即可。如果需要访问筛选器中的下一个对象(例如,其中),可以使用扩展方法提供对集合中索引的访问

例1:

 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})