2010-12-10 4 views
1

Я только что начал использовать выражения лямбда, и мне очень нравится ярлык. Мне также нравится тот факт, что у меня есть область действия внутри лямбда всеобъемлющего метода. У меня есть проблемы с гнездом лямбда. Вот то, что я пытаюсь сделать:Entity Framework и вложенные выражения лямбда

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


} 

Второй лямбда, где я получаю следующую ошибку компиляции времени:

Невозможно преобразовать лямбда-выражения к типу «System.ServiceModel.DomainService.Client.LoadBehavior» потому что это не тип делегата

Компилятор выбирает неправильную перегрузку для метода Load, хотя я использую ту же самую переопределение, что и в предыдущей лямбда.

Это потому, что я пытаюсь гнездиться? Или у меня что-то еще не так?

Спасибо,

-Скотт

+0

Извините, я нашел проблему. Это не имело ничего общего с вложенной лямбдой и все, что связано с плохо сформированными петлями внутри моей лямбды. Это заставило intelisense сойти с ума и сообщить фальшивую ошибку. Все хорошо с кодом выше. – Scott

ответ

0

Нашли проблему, как описано в моем комментарии выше. Я сейчас вернусь к работе - красное лицо и все ...

0

Я понимаю, что это не тот ответ, который вы хотите, но я предлагаю проявлять осторожность в отношении длинных и/или вложенных лямбда. Они работают, но они часто делают код более сложным для чтения/поддержки другими разработчиками. Я стараюсь ограничить свои лямбды длиной до трех утверждений, без гнездования.

Смежные вопросы