【问题标题】:could not resolve property: CS$<>8__locals2 of: BusinessObjectMain; Nhibernate QueryOver Linq, lambda expression inside a for loop无法解析属性:CS$<>8__locals2 of:BusinessObjectMain; Nhibernate QueryOver Linq,for循环内的lambda表达式
【发布时间】:2021-02-12 16:51:46
【问题描述】:

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

无法解析属性: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 nhibernate-mapping queryover linq-to-nhibernate


    【解决方案1】:

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

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

    【讨论】:

    • 悲剧...我在 3.3.2 版 :(
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多