实体框架和嵌套的Lambda表达式

时间:2010-12-10 20:22:48

标签: entity-framework lambda

我刚刚开始使用Lambda表达式,并且非常喜欢快捷方式。我也喜欢这样一个事实,即我在包含方法的lambda中有范围。我遇到麻烦的一件事是嵌套lambda。这是我想要做的:

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


}

第二个lambda是我得到以下编译时错误的地方:

无法将Lambda表达式转换为类型'System.ServiceModel.DomainService.Client.LoadBehavior',因为它不是委托类型

编译器为Load方法选择了错误的重载,即使我使用的是前一个Lambda中的覆盖。

这是因为我想要筑巢吗?或者我还有其他错误吗?

谢谢,

-Scott

2 个答案:

答案 0 :(得分:0)

发现上述评论中描述的问题。我现在回去工作 - 红脸和所有......

答案 1 :(得分:0)

我意识到这不是你想要的答案,但我建议谨慎对待冗长和/或嵌套的lambda。它们可以工作,但是它们经常使代码更难以被其他开发人员读取/维护。我尝试将我的lambdas长度限制为三个语句,没有嵌套。