パーティーに遅れましたが、少なくとも回答を投稿したいと思いました...大騒ぎせずにこれを達成するには2つの方法があります(実際には同じ方法ですが、ルートがわずかに異なります)。
したがって、基本的な EF コンテキスト クエリ、実行前があります。
var query = context.Projects
.Where(x => x.Division == selectedDivision);
クエリをロードして、エンティティがローカル キャッシュにあるようにします。次に、DGV のバインディング ソースをローカル キャッシュの同期された BindingList にポイントします。
query.Load();
projectBindingSource.DataSource = context.Projects.Local.ToBindingList();
または...変更の追跡やキャッシュが他の操作の「邪魔になる」ことを望まない/必要としない場合があったため、追跡されないコレクションが必要でした。
追跡せずにクエリを実行し、その結果を ObservableCollection にロードします (これが .Local です)。DGV のバインディング ソースを ObservableCollection の同期された BindingList に向ける
var locs = new ObservableCollection<Location>(query.AsNoTracking().ToList());
locationBindingSource.DataSource = locs.ToBindingList();
すべてのテキスト、数値、およびブール値の列では、ヘッダー クリックの並べ替えが有効になります。ソートされないのは、ナビゲーション プロパティの列です。プロジェクトに所有者ナビゲーション プロパティがあるとします。これは、所有者エンティティの ToString() オーバーライドが Owner.FullName プロパティを表示しているためです。FullName 値を持つ所有者列が表示されますが、ソーターを想定しています。列の型は System.Data.Entity オブジェクトとして (表示される吹き出しテキストではなく) 認識されるため、既定のソーターはありません。