将执行以下哪个linq查询

本文关键字:linq 查询 执行 | 更新日期: 2023-09-27 18:27:34

如何知道将执行以下哪一个linq查询?

    // I think this will not be executed
    var temp1 = PdvEntities.Entities.Products;
    // Not sure
    IEnumerable<Data.Products> temp2 = PdvEntities.Entities.Products;
    // will not be executed
    var temp3 = from a in PdvEntities.Entities.Products select a;
    ListView lv1 = new ListView();
    lv1.DataContext = temp1; // will this make the first query to be executed?
    lv1.ItemsSource = temp2; // will this make the second query execute?
    // I think this will be executed
    var temp4 = PdvEntities.Entities.Products.ToList();

注意,我使用ADO.Net实体数据模型来执行数据库中表Products的查询

将执行以下哪个linq查询

这个概念被称为"延迟执行",一般经验法则是,在实际访问底层数据之前,不会执行查询。另一种思考方式是,当您不再返回IEnumerableIQueryable时,您可能正在执行代码,就像您的上一个temp4放入了一个List<T>,它肯定在访问数据。

这里有一个不错的解释:

http://www.codeguru.com/columns/vb/article.php/c16935

temp2将在UI更新列表视图时进行评估。

除非绑定到ListView的DataContext,否则永远不会对temp1求值。

对于DataContext,它实际上取决于你对它做了什么。如果你从不枚举集合,查询将永远不会执行。对于ItemsSource,我相信它会在您分配它时枚举它,以便在列表视图中创建必要的对象,只要它显示给用户。如果它没有显示,我认为查询不会被执行。最简单的方法是快速地模拟一些东西,完成您在代码示例中所做的工作,然后在Visual Studio中逐步完成。这样,你就可以在之后查看当地人的窗口,看看藏品是否已经填写完毕。