EF no WinForms: como filtrar dados em BindingSource / DGW (.Local.ToBindingList ())

Eu geramos um modelo EF (database primeiro) e DataSource seguindo este tutorial http://msdn.microsoft.com/en-us/data/jj682076.aspx

No meu formulário, criei BindingSource (bsUsers) e vinculei DataGridView a ele.

Aqui está como eu carrego dados na boot do formulário:

_myDbContext = new MyDbContext(); _myDbContext.Users.Load(); bsUsers.DataSource = _myDbContext.Users.Local.ToBindingList(); 

Ele funciona, eu posso adicionar e modificar registros usando DataGridView e outros controles vinculados.

Mas a coisa que não descobri é como filtrar dados. Por exemplo, eu quero ter uma checkbox de texto onde eu possa digitar o nome do usuário (ou parte dele) e ele irá esconder todos os outros registros.

Parece que BindingList que é retornado pelo método ToBidingList () não suporta filtragem?

Eu tentei isso

 bsUsers.Filter = "Id = 1"; 

ou

 bsUsers.Filter = "Username like 'admin'"; 

Mas sem efeito. UPD: e bsUsers.SupportsFiltering é false .

Eu pesquisei mas encontrei apenas este tópico MSDN tópico onde eles sugerem para filtrar os dados antes do carregamento ( Users.Where(...).Load() ), e isso não é o que eu preciso. Eu quero carregar todos os registros e, em seguida, permitir filtrá-lo.

A propriedade Filter do BindingSource só funciona com listas que implementam a interface IBindingListView . Como o BindingList apenas implementa o IBindingList (que não possui resources de filtragem), a propriedade Filter não faz nada.

Carregar seus dados em algo como um List e fornecer o bsUsers.DataSource com elementos filtrados da lista, por exemplo, users.Where( u=> u.Id == 1 ).ToList() ou replace seu BindingList por um lista que implementa IBindingListView. Possíveis pointers daqui: Implementações genéricas do IBindingListView