2014-07-25 27 views
7

ich einige sehr einfache Testcode läuft auf die Auswirkungen der Konstanten in LINQ-Abfragen zu suchen und ich habe Probleme, eine Überlastung Ortung ...Lambda Überlastung Skip/Take Fehlende

This MSDN article speziell eine Lambda-Überlastung erwähnt für skip/take, aber ich kann es nicht finden.

Aus Abschnitt 4.2 von Performance Considerations for Entity Framework 4, 5, and 6:

"In particular pay attention to the use of Skip and Take when doing paging. In EF6 these methods have a lambda overload that effectively makes the cached query plan reusable because EF can capture variables passed to these methods and translate them to SQLparameters."

Sie folgen, dass mit diesem Codebeispiel:

var customers = context.Customers.OrderBy(c => c.LastName); 
for (var i = 0; i < count; ++i) 
{ 
    var currentCustomer = customers.Skip(() => i).FirstOrDefault(); 
    ProcessCustomer(currentCustomer); 
} 

Mein Testcode:

for(int i = 0; i<100; i++) 
{ 
    var result = dc.Products 
       //.Select(p => p.Name) 
        .OrderBy(p => p.Name) 
        .Skip(() => i) 
        .ToList(); 
} 

Error: Cannot convert lambda expression to type 'int' because it is not a delegate type

Bin ich Fahren Lesen, oder ist es Ein Include fehlt irgendwo mit der überladenen Erweiterungsmethode? Ich bin auf EF 6.1.1.

Antwort

13

Die Erweiterungsmethode, die Sie suchen, ist "QueryableExtensions.Skip". Es befindet sich im Namespace System.Data.Entity in der EntityFramework-Assembly.

+0

Fantastisch - Danke! Meine Google-Fähigkeiten versagten mir dabei und ich fing an, ernsthaft meine Lesefähigkeiten abzuschätzen. Will Antwort in ein paar annehmen - nur auf den Timer warten :) –