背景:
我正在设计一个由DbSet
支持的类似列表的控件(WinForms)。主要要求是不将整个列表加载到本地内存中。我在虚拟模式下使用DataGridView
作为底层UI。我打算将CellValueNeeded
函数实现为orderedQueryable.ElementAt(n)
。
问题:
我需要允许控件的使用者通过值而不是索引获取/设置当前选择的值。获取很容易 - 它与CellValueNeeded操作相同 - 但设置更难:它需要我获取给定元素的索引。没有内置的orderedQueryable.FirstIndexOf(value)
操作,虽然我理论上可以使用某种orderedQueryable.SkipWhile
shenanigans伪造它,其中表达式有副作用,但实际上DbSet的查询提供程序可能不支持这样做。
问题:
是否有一种有效的方法可以将特定值的索引置于IOrderedQueryable
之内?怎么样?
(如果这种方法结果是站不住脚的话,我会接受有关如何重组问题以使其可解决的建议。)
旁注: 可以在列表中插入和删除元素,在这种情况下,旧索引将无效 - 这是可以接受的,因为它们永远不会暴露给消费者。消费者尝试选择实际上不在列表中的项目是错误的,实际上消费者首先从列表中获取该项目(尽管从那时起索引可能已经改变)。