На MSDN вы можете прочитать следующее:
Мы рекомендуем не связывать элементы управления напрямую с ObjectQuery.Вместо этого свяжите элементы управления с результатом метода Execute.Привязка таким образом предотвращает многократное выполнение запроса во время привязки.
и
Если вы предпочитаете работать с запросами LINQ, мы рекомендуем вам привести результатзапроса к ObjectQuery и вызовите метод Execute.
Мой вопрос: Правильно ли привести результат LINQ to Entity (который является не более чем IQueryable) к ObjectQuery, более конкретнотип ??
Правильно ли использовать этот шаблон, когда необходимо привязать элемент управления к результату запроса LINQ?
Когда я перетаскиваю источник данных из окон источников данных Visual Studio 2010к моей форме WPF генерируются два метода, как объяснено в MSDN, но в моем приложении мне нужно применить фильтр к переменной "предопределенный токен", и поэтому я написал запрос LINQ (заменив сгенерированную инициализацию переменной "предопределенный токен")), а затем компилятор жалуется, потому что он не может явным образом привести запрос LINQ к ObjectQuery.
foсейчас я использую код, который работает в моем приложении, он работает, но я действительно боюсь пропустить что-то здесь и не следовать рекомендованному шаблону.
private System.Data.Objects.ObjectQuery<Token> GetPredefinedTokensQuery(UnduplicateModelContainer unduplicateModelContainer)
{
// Auto generated code
System.Data.Objects.ObjectQuery<Unduplicate.Token> predefinedTokensQuery = (System.Data.Objects.ObjectQuery<Unduplicate.Token>)
from token in unduplicateModelContainer.Tokens
where token.Predefined == true
select token;
// To explicitly load data, you may need to add Include methods like below:
// predefinedTokensQuery = predefinedTokensQuery.Include("Tokens.Type").
// For more information, please see http://go.microsoft.com/fwlink/?LinkId=157380
// Returns an ObjectQuery.
return predefinedTokensQuery;
}
private void windowPredefinedTokens_Loaded(object sender, RoutedEventArgs e)
{
Unduplicate.UnduplicateModelContainer unduplicateModelContainer = new Unduplicate.UnduplicateModelContainer();
// Load data into Tokens. You can modify this code as needed.
System.Windows.Data.CollectionViewSource predefinedTokensViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("predefinedTokensViewSource")));
System.Data.Objects.ObjectQuery<Unduplicate.Token> predefinedTokensQuery = this.GetPredefinedTokensQuery(unduplicateModelContainer);
predefinedTokensViewSource.Source = predefinedTokensQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
}
Спасибо заранее.Фрэнк Абель