【问题标题】:Entity Framework and Nested Lambda Expressions实体框架和嵌套 Lambda 表达式
【发布时间】:2010-12-11 04:41:02
【问题描述】:

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

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 中相同的覆盖。

这是因为我想嵌套吗?还是我有其他问题?

谢谢,

-斯科特

【问题讨论】:

  • 抱歉 - 我发现了问题。它与嵌套的 lambda 无关,而与我的 Lambda 中格式错误的循环无关。它导致 intelisense 发疯并报告虚假错误。上面的代码一切都很好。

标签: entity-framework lambda


【解决方案1】:

发现了我上面评论中描述的问题。我现在要回去工作了——脸都红了……

【讨论】:

    【解决方案2】:

    我知道这不是您想要的答案,但我建议谨慎使用冗长和/或嵌套的 lambda。它们可以工作,但它们通常会使代码更难被其他开发人员阅读/维护。我尝试将我的 lambda 表达式的长度限制为三个语句,没有嵌套。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-09
      • 2023-03-23
      • 2012-10-22
      • 1970-01-01
      • 2023-03-27
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多