Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个LINQtoSQL查询是检索所有记录,然后选择一条,还是只检索一条?_Linq_Linq To Sql - Fatal编程技术网

这个LINQtoSQL查询是检索所有记录,然后选择一条,还是只检索一条?

这个LINQtoSQL查询是检索所有记录,然后选择一条,还是只检索一条?,linq,linq-to-sql,Linq,Linq To Sql,我正在寻找一个包含大量记录的表中的最高键,我想知道linqtosql是否能有效地做到这一点,或者我是否需要采取另一种方法来确保代码不会跨越数据库中的所有记录 int tkey = (from r in GMSCore.db.Receipts orderby r.TransactionKey descending select r.TransactionKey).FirstOrDefault(); 这是否

我正在寻找一个包含大量记录的表中的最高键,我想知道linqtosql是否能有效地做到这一点,或者我是否需要采取另一种方法来确保代码不会跨越数据库中的所有记录

        int tkey =
            (from r in GMSCore.db.Receipts
             orderby r.TransactionKey descending
             select r.TransactionKey).FirstOrDefault();
这是否被理解为:

select Top(1) TransactionKey 
from Receipt
order by TransactionKey desc

或者它会提取所有记录,然后过滤C代码?

它只检索一条记录。生成的查询如下所示:

SELECT TOP(1) [t0].[TransactionKey] 
FROM Receipt [t0]
ORDER BY [t0].[TransactionKey] DESC
在调用
FirstOrDefault()
或其他强制执行的运算符之前,不会执行查询(请参阅)

您甚至可以将查询定义保存到变量中(感受差异——不是查询执行的结果,而是查询本身)

您可以稍后执行原始查询

foreach(var key in query) // another SQL is generated and executed
    // ...
但在本例中,生成的SQL查询如下所示

SELECT [t0].[TransactionKey] 
FROM Receipt [t0]
ORDER BY [t0].[TransactionKey] DESC
因此,您可以修改查询定义,直到执行为止。例如,您可以添加筛选或更改顺序。事实上,执行查询的运算符通常也会影响查询生成-例如,选择第一个、单个或最大项

SELECT [t0].[TransactionKey] 
FROM Receipt [t0]
ORDER BY [t0].[TransactionKey] DESC