2010-12-10 5 views
1

Ich habe gerade angefangen, Lambda-Ausdrücke zu verwenden, und mag die Verknüpfung wirklich. Ich mag auch die Tatsache, dass ich Spielraum innerhalb des Lambda der umfassenden Methode habe. Eine Sache, mit der ich Probleme habe, ist das Nisten von Lambdas. Hier ist, was ich zu tun versucht:Entity Framework und verschachtelte Lambda-Ausdrücke

public void DoSomeWork() 
{ 
    MyContext context = new MyDomainContext(); 
    context.GetDocumentTypeCount(ci.CustomerId, io => 
    { 
    if (io.HasError) 
    { 
     // Handle error 
    } 
    // Do some work here 
    //   ...   
    // make DB call to get data 
    EntityQuery<AppliedGlobalFilter> query = 
     from a in context.GetAppliedGlobalFiltersQuery() 
     where a.CustomerId == ci.CustomerId && a.FilterId == 1 
     select a; 

    context.Load<AppliedGlobalFilter>(query, lo => 
     { 
     if (lo.HasError) 
     { 
     } 

     **// Do more work in this nested lambda. 
     // Get compile time error here** 

    } 
        }, null); 
     }, null); 


} 

Der zweite Lambda ist, wo ich die folgende Kompilierung Fehler:

Kann nicht Lambda Ausdruck umwandeln geben ‚System.ServiceModel.DomainService.Client.LoadBehavior‘ Weil es kein Delegattyp ist

Der Compiler wählt die falsche Überladung für die Load-Methode, obwohl ich dieselbe Überschreibung verwende, die ich im vorherigen Lambda durchgeführt habe.

Ist das, weil ich versuche zu nisten? Oder habe ich etwas anderes falsch?

Danke,

-Scott

+0

Entschuldigung - ich habe das Problem gefunden. Es hatte nichts mit dem verschachtelten Lambda und allem, was mit schlecht formatierten Schleifen in meinem Lambda zu tun hatte, zu tun. Das führte dazu, dass Intelisense verrückt wurde und einen falschen Fehler meldete. Alles ist gut mit dem obigen Code. – Scott

Antwort

0

Gefunden das Problem, wie oben in meinem Kommentar beschrieben. Ich gehe jetzt zurück zur Arbeit - rotes Gesicht und alles ....

0

Ich weiß, das ist nicht die Antwort, die Sie wollen, aber ich schlage vor Vorsicht über lange und/oder verschachtelte Lambdas. Sie funktionieren, aber sie machen Code oft schwieriger zu lesen/zu warten von anderen Entwicklern. Ich versuche, meine lambdas auf drei Aussagen zu begrenzen, ohne zu verschachteln.