【发布时间】:2016-12-10 20:59:01
【问题描述】:
我正在尝试实现IBindingListView,它将与任何作为数据源的Linq 查询一起使用,但我被困在Find(PropertyDescriptor, Object) 方法的实现上,该方法应该找到包含特定属性中某些值的记录位置。
我不想遍历内存中的所有记录。我希望数据库来做到这一点。
很遗憾,Linq 不支持 row_number() SQL 函数,我无法在保留排序和过滤的同时找到任何其他方法。
换句话说:
给定
class Entity
{
public string StringProperty {get; set;}
public int IntProperty {get; set;}
public string StringProperty2 {get; set;}
}
|StringProperty | IntProperty | StringProperty2|
|ccc | 102 | value 2 |
|aaa | 100 | value 0 |
|ddd | 103 | value 3 |
|aaa | 101 | value 1 |
查询
var query = from e in Entities
where e.IntProperty > 100
orderby e.StringProperty
这给了我
|StringProperty | IntProperty | StringProperty2|
|bbb | 101 | value 1 |
|ccc | 102 | value 2 |
|ddd | 103 | value 3 |
带有参数 StringProperty2 = 'value 2' 的 Find() 应该返回 1(基于 0 的索引),但应该使用 Linq 找到它,以便在数据库中执行。
如果执行 2 或 3 个查询,我没有问题,但请不要假设我对主键或特定 Linq 提供程序一无所知。我们可以假设,如果 Linq to SQL 或 Entity Framework 能够将某些内容转换为 SQL,那么它就可以使用。
如何实现 IBindingListView.Find() 方法,该方法适用于任何 Linq 查询作为数据源?
【问题讨论】:
-
但是回到数据库中查找本地列表中可以轻松获取的内容有点奇怪。
-
@Arnold 除非您有一百万条记录要在网格中显示,或者您的代码所在的层不应该对 GUI 分页等有任何了解。
标签: c# .net entity-framework linq linq-to-sql