Bri*_*ian 0 c# linq asp.net dataview
我有以下代码,它确实有效:
var dataSource = (from p in dv.ToTable().AsEnumerable() where filter(p) select p).AsDataView();
filter是一个Func<DataRow, bool>
dv被一个DataView
dataSource被用作一个DataSource用于DataGrid.
总之,这令我有点难看,我打电话ToTable,AsEnumerable和AsDataView,所以我想知道是否有降低呼叫的数量的方法.
这是我能做到的那么简单吗?
编辑: DataGrid有分页,我使用dataSource来确定条目总数.我并不特别担心这个问题的效率; dv只有几千个项目,表格在内存中维护.
好吧,有一件事,我会说使用查询表达式在这里有些笨拙.您的代码相当于:
var dataSource = dv.ToTable()
.AsEnumerable()
.Where(filter)
.AsDataView();
Run Code Online (Sandbox Code Playgroud)
我想说的更清楚.
另一种选择是:
var dataSource = dv.Cast<DataRowView>()
.Select(rowView => rowView.Row)
.Where(filter)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这样可以避免构建a DataTable,因此也可能更有效(它只是DataRowView从视图中流式传输并选择它们的底层DataRows)但最后构建了一个List<DataRow>.另一方面,它现在不是真的在视图本身上行动 - 因为它只是选择底层行.根据您的观点,您可能会或可能不会根据需要执行操作.
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |