无法解析 属性:CS$<>8__locals2 of: BusinessObjectMain; Nhibernate QueryOver Linq,for 循环内的 lambda 表达式

could not resolve property: CS$<>8__locals2 of: BusinessObjectMain; Nhibernate QueryOver Linq, lambda expression inside a for loop

我们使用 Vs2019 和旧版本的 Nhibernate 3.2。 我们最近升级到 VS2019。此代码在 VS2010 中工作正常。
我们在使用 Nibernate QueryOver、where 子句中的 lambda 表达式时遇到此错误。我将其简化为最小版本。在运行期间,块 1 会失败,而块 2 不会。为什么?我想不通。 它可能与 .net framework 4.8、roselyn 或旧版本的 Nhibernate 相关吗? 我没有 post 这里的所有业务对象,但如果需要我可以这样做。我还在不同业务对象的应用程序中看到了这种行为。

could not resolve property: CS$<>8__locals2 of: BusinessObjectMain

区块 1

var EventQuery = session.QueryOver<BusinessObjectMain()
                    .JoinAlias(ce => ce.Bo1, () => Bo1)
                    .JoinAlias(ce => ce.Bo2, () => Bo2, JoinType.LeftOuterJoin)
                    .JoinAlias(() => Bo2.Bo3, () =>Bo3, JoinType.LeftOuterJoin)
                    ;



for (int i = 0; i < 1; i++) {

  object[] arr = new object[1];
  arr[0] = 202;
  EventQuery = EventQuery.Where(() => Bo3.TypeId.IsIn(arr));
}


var Results = EventQuery.Future<Data>();
 var list = Results.ToList();---Error happens here.  could not resolve property: CS$<>8__locals2 of: BusinessObjectMain

为什么下面的代码有效?如果我将 Where 子句移到 for 循环之外,它可以正常工作而不会出现任何错误

区块 2

 var EventQuery = session.QueryOver<BusinessObjectMain()
                        .JoinAlias(ce => ce.Bo1, () => Bo1)
                        .JoinAlias(ce => ce.Bo2, () => Bo2, JoinType.LeftOuterJoin)
                        .JoinAlias(() => Bo2.Bo3, () =>Bo3, JoinType.LeftOuterJoin)
                        ;
    
      object[] arr = new object[1];
      arr[0] = 202;
      EventQuery = EventQuery.Where(() => Bo3.TypeId.IsIn(arr));
    
    for (int i = 0; i < 1; i++) {
    
     
    }
    
    
    var Results = EventQuery.Future<Data>();
     var list = Results.ToList()

这是 NHibernate 中与自 Visual Studio 2015 年以来使用的 Roslyn 编译器相关的错误(因为 Roslyn 编译 lambda 的方式不同)。参见 https://nhibernate.jira.com/browse/NH-3795, https://github.com/nhibernate/nhibernate-core/pull/441

它已在 NHibernate 版本 3.3.5、3.4.1 和 4.0.4+ 中修复