//Limit records, order remaining records, then take first or default.
x.Where(predicateExpression)
.OrderBy(rankExpression)
.FirstOrDefault();
//Order records, take first of ordered set that matches predicate.
x.OrderBy(rankExpression)
.FirstOrDefault(predicateExpression)
我很好奇上面的Linq查询在Linq-to-Entities中转换为SQL时是否相同。我非常肯定他们在对内存集运行时是等价的,因为FirstOrDefault会按顺序迭代有序集,同时跳过与谓词不匹配的记录,这相当于过滤订购前将它们拿出来。但是,在Linq-To-Entities中,这将转换为SQL,因此我担心在排序后应用谓词(即' where'子句)将导致中间无序集合第一个或默认操作。也许其中一个在运行时在Linq-to-Entities中甚至无效。
答案 0 :(得分:0)
根据SQL Server Profiler,这两个Linq查询生成以下形式的相同SQL查询:
--pseudo-SQL
SELECT TOP (1) <<columns from Extent1>>
FROM <<tableName>> AS [Extent1]
WHERE <<predicateExpression>>
ORDER BY <<rankExpression>> ASC