为什么在将数据源传递给 BindingSource 之前对其调用 .OrderBy 时,我的数据源的类型似乎发生了变化?

Why does the type of my DataSource seem to change when I call .OrderBy on it before passing it to a BindingSource?

我遇到了一个问题,希望有人能帮助我。

我有一个 class,EmployeeList 继承自:

public class MultipleSortableBindingListView<T> : BindingList<T>, IBindingListView

我填写 EmployeeList,并设置一个 BindingSource.DataSource 等于它:

EmployeeListBindingSource.DataSource = lstEmployees.OrderBy(t=>t.LastName)
   .ThenBy(t=>t.FirstName);

然后,当我引用DataSource 时,它​​不再是EmployeeList 类型。

基本上,我需要在 OrderBy 执行后转换回 EmployeeList

您可能需要执行以下操作:

var newlist = new EmployeeList(lstEmployees.OrderBy(t=>t.LastName).ThenBy(t=>t.FirstName));

但是,由于 EmployeeList 派生自名称为 MultipleSortableBindingListView 的 class,人们会怀疑它有自己的方法来设置排序顺序,而不必求助于使用 LINQ。

我最近遇到了类似的问题。 (我认为)

当您在 EmployeeList 上调用那些 LINQ 方法 (.OrderBy(...).ThenBy(...)) 时会发生什么,它将 EmployeeList 的类型更改为类似 'IOrderedList' 的类型。

James Curran 为该约定提供了可行的解决方法。