Я хочу иметь возможность делать то, что прокомментировано ниже, но я не могу понять, как это сделать. Я понимаю, почему мне нужно выполнить загрузку, а затем сослаться на локальную наблюдаемую коллекцию и установить ее как BindingList, чтобы изменения в сетке синхронизировались, но как я могу выполнить фильтрацию, которую я хочу сделать, прежде чем назначать его? Как и сейчас, мне нужно выполнить фильтрацию в сетке, а это не то, что я хочу делать.
Core.MyContext.SiteVisits.Load();
var siteVisits = Core.MyContext.SiteVisits.Local.ToBindingList();
//.Where(siteVisit => siteVisit.UPC == _site.UPC)
ugSiteVisits.DataSource = siteVisits;
Большое спасибо за любую помощь.
Вместо того, чтобы загружать все посещения сайта, просто запросите те, которые вам нужны, и добавьте их в локальную коллекцию с помощью IQueryable<T>.Load()
.
Core.MyContext.SiteVisits.Where(siteVisit => siteVisit.UPC == _site.UPC).Load();
ugSiteVisits.DataSource = Core.MyContext.SiteVisits.Local.ToBindingList();
Хм, я, конечно, пробовал это, и, конечно же, это не сработало. IQueryable не поддерживает ToBindingList, что является моей проблемой. Извините, нет кредита для вашего ответа.
Давид, большое спасибо за эту информацию! Новый метод observablecollection — это именно то, чего мне не хватало, и он работает в моей программе. Я не мог поверить, что это невозможно сделать, вы восстановили мою веру в EntityFramework/Linq.
Черт, кажется, мне нужно забрать свою славу за это. Я протестировал свое приложение, чтобы изменить поле в строке в наборе баз данных, и это сработало нормально. Однако я удалил строку в другом тесте, и эта строка не удаляется в базе данных. Теперь я подозреваю, что метод расширения AsEnumerable не синхронизирует наблюдаемую коллекцию с EF. Помоги пожалуйста?
В моих исчерпывающих усилиях, чтобы понять это, я нашел метод расширения, который должен был превратить неисчислимый диапазон в список привязок, показанный ниже. Это тоже не сработало, потому что изменения в сетке не отражались в базе данных и наоборот. общедоступный статический BindingList<T> ToBindingList<T> (этот диапазон IEnumerable<T>) { return new BindingList<T>(range.ToList()); }
См. обновленный ответ для возможности использования DbSet<T>.Local для привязки.
Второе решение работает, первое нет. Еще раз спасибо за вашу помощь!
Прохладный. Я забыл, почему .Local был там в первую очередь :)
Переместите
Where
передLoad
.