将执行以下哪个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的查询
这个概念被称为"延迟执行",一般经验法则是,在实际访问底层数据之前,不会执行查询。另一种思考方式是,当您不再返回IEnumerable
或IQueryable
时,您可能正在执行代码,就像您的上一个temp4放入了一个List<T>
,它肯定在访问数据。
这里有一个不错的解释:
http://www.codeguru.com/columns/vb/article.php/c16935
temp2
将在UI更新列表视图时进行评估。
除非绑定到ListView的DataContext,否则永远不会对temp1
求值。
对于DataContext,它实际上取决于你对它做了什么。如果你从不枚举集合,查询将永远不会执行。对于ItemsSource,我相信它会在您分配它时枚举它,以便在列表视图中创建必要的对象,只要它显示给用户。如果它没有显示,我认为查询不会被执行。最简单的方法是快速地模拟一些东西,完成您在代码示例中所做的工作,然后在Visual Studio中逐步完成。这样,你就可以在之后查看当地人的窗口,看看藏品是否已经填写完毕。