在MSDN,您可以阅读以下内容:
我们建议您不要将控件直接绑定到 ObjectQuery。相反,将控件绑定到 Execute 方法的结果。以这种方式绑定可以防止在绑定期间多次执行查询。
和
如果您更喜欢使用 LINQ 查询,我们建议您将查询结果强制转换为 ObjectQuery 并调用 Execute 方法。
我的问题是:将 LINQ to Entity(最多是 IQueryable)的结果转换为更具体的类型 ObjectQuery 是否正确?
当需要将控件绑定到 LINQ 查询的结果时,这是正确的模式吗?
当我将数据源从 Visual Studio 2010 数据源窗口拖到我的 WPF 表单时,会生成两种方法,如 MSDN 中所述,但在我的应用程序中,我需要对“predefinedTokensQuery”变量应用过滤器,这就是我写的原因LINQ 查询(替换生成的“predefinedTokensQuery”变量的初始化),然后编译器抱怨,因为它无法将 LINQ 查询显式转换为 ObjectQuery。
以下代码现在在我的应用程序中是如何工作的,但我真的很担心会在这里错过一些东西并且不遵循推荐的模式。
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);
}
先谢谢了。弗兰克·阿贝尔