2017-07-16 32 views
-1
//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到實體轉換爲SQL上述LINQ查詢是等價的。我相當肯定對內存運行集合時,他們等同,因爲FirstOrDefault會遍歷下令順序設置,而跳過不謂詞,這將相當於訂購產品之前,過濾出來匹配記錄。然而,在LINQ到實體,這將被轉換爲SQL,所以我擔心訂貨之後施加謂詞(即「其中」子句)將導致中間無序集合,其第一或默認將操作上。也許其中的一個在運行時在Linq-to-Entities中甚至是無效的。是這兩個LINQ查詢功能上等同於LINQ到實體?

回答

0

這兩個LINQ查詢根據SQL Server設置產生以下形式的相同。SQL查詢:

--pseudo-SQL 
SELECT TOP (1) <<columns from Extent1>> 
FROM <<tableName>> AS [Extent1] 
WHERE <<predicateExpression>> 
ORDER BY <<rankExpression>> ASC