1

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);
}

先谢谢了。弗兰克·阿贝尔

4

0 回答 0