2010-12-10 19 views
1

Je viens de commencer à utiliser des expressions Lambda, et j'aime vraiment le raccourci. J'aime aussi le fait que j'ai une portée dans le lambda de la méthode englobante. Une chose que j'ai du mal à nicher est lambdas. Voici ce que je suis en train de faire:Entity Framework et expressions Lambda imbriquées

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); 


} 

La deuxième lambda est où je reçois l'erreur de compilation suivante:

Impossible de convertir l'expression Lambda de type « System.ServiceModel.DomainService.Client.LoadBehavior » parce que ce n'est pas un type de délégué

Le compilateur choisit la mauvaise surcharge pour la méthode Load même si j'utilise le même remplacement que j'ai fait dans le précédent Lambda. Est-ce parce que j'essaie d'imbriquer? Ou est-ce que j'ai quelque chose d'autre qui ne va pas?

Merci,

-Scott

+0

Désolé - j'ai trouvé le problème. Cela n'avait rien à voir avec le lambda imbriqué et tout à voir avec des boucles mal formées à l'intérieur de ma Lambda. Cela a rendu intelisense pour devenir fou et signaler une erreur bidon. Tout est bon avec le code ci-dessus. – Scott

Répondre

0

trouvé le problème comme décrit dans mon commentaire ci-dessus. Je vais retourner au travail maintenant - visage rouge et tout ....

0

Je réalise que ce n'est pas la réponse que vous voulez, mais je suggère la prudence à propos de lambdas longues et/ou imbriquées. Ils fonctionnent, mais ils rendent souvent le code plus difficile à lire/maintenir par d'autres développeurs. J'essaie de limiter mes lambdas en longueur à trois déclarations, sans nidification.