Ну, во-первых, я бы сказал, что использование выражения запроса здесь несколько неуклюже.Ваш код эквивалентен:
var dataSource = dv.ToTable()
.AsEnumerable()
.Where(filter)
.AsDataView();
, который, я бы сказал, более понятен.
Другая альтернатива будет:
var dataSource = dv.Cast<DataRowView>()
.Select(rowView => rowView.Row)
.Where(filter)
.ToList();
Это позволяет избежать построения DataTable
,это также может быть более эффективным (он будет просто передавать DataRowView
s из представления и выбирать их базовые DataRow
s), но в конце создаст List<DataRow>
.С другой стороны, теперь не действует на само представление, на самом деле - потому что он просто выбирает нижележащие строки.Это может или не может делать то, что вам нужно, в зависимости от того, что делает ваш взгляд.