2013-07-26 56 views
0
DataMore1 dm1 = null; 
DataMore2 dm2 = null;  

var list = session.QueryOver<Data>() 
    .JoinAlias(data => data.DataMore1,() => dm1, NHibernate.SqlCommand.JoinType.LeftOuterJoin, Expression.Eq("Segment", 0)) 
    .JoinAlias(data => data.DataMore2,() => dm2, NHibernate.SqlCommand.JoinType.LeftOuterJoin, Expression.Eq("Segment", 0)) 
    .Select(d => 
     new Data() 
     { 
      PlantID = d.PlantID, 
      AreaID = d.AreaID, 
      CellID = d.CellID, 
      DeviceID = d.DeviceID, 
      StartDateTime = d.StartDateTime, 
      DataPoint01 = d.DataPoint01, 
      DataMore1 = new List<DataMore1>(new List<DataMore1> 
      { 
       new DataMore1 { Segment = dm1.Segment, DataPoint101 = dm1.DataPoint101 } 
      }), 
      DataMore2 = new List<DataMore2>(new List<DataMore2> 
      { 
       new DataMore2 { Segment = dm2.Segment, DataPoint201 = dm2.DataPoint201 } 
      }) 
     }) 
    .List<Data>(); 

產生此異常。類型'''引用範圍''但未定義的Lambda運行時異常'變量'''但未定義

variable 'd' of type 'FNHSamples.Data' referenced from scope '', but it is not defined 
+0

你確定這是一個錯誤_runtime_? –

+1

它當然不是編譯時錯誤,因爲它編譯好並在運行時中斷。 – faldeland

回答

-2

在定義了d之後,您缺少一個開放的大括號。 我也添加了回報。

嘗試以下操作:

DataMore1 dm1 = null; 
DataMore2 dm2 = null;  

var list = session.QueryOver<Data>() 
    .JoinAlias(data => data.DataMore1,() => dm1, NHibernate.SqlCommand.JoinType.LeftOuterJoin, Expression.Eq("Segment", 0)) 
    .JoinAlias(data => data.DataMore2,() => dm2, NHibernate.SqlCommand.JoinType.LeftOuterJoin, Expression.Eq("Segment", 0)) 
    .ToList() 
    .Select(d => 
     { 
      return new Data() 
      { 
       PlantID = d.PlantID, 
       AreaID = d.AreaID, 
       CellID = d.CellID, 
       DeviceID = d.DeviceID, 
       StartDateTime = d.StartDateTime, 
       DataPoint01 = d.DataPoint01, 
       DataMore1 = new List<DataMore1>(new List<DataMore1>{new DataMore1 { Segment = dm1.Segment, DataPoint101 = dm1.DataPoint101 }}), 
       DataMore2 = new List<DataMore2>(new List<DataMore2>{new DataMore2 { Segment = dm2.Segment, DataPoint201 = dm2.DataPoint201 }}) 
      }; 
     }) 
     .List<Data>(); 
+0

謝謝你的嘗試。但是,這會產生編譯時錯誤。 「帶有語句正文的lambda表達式不能轉換爲表達式樹」...現在正在研究此錯誤... – faldeland

+0

請參閱我的編輯,在「Select」之前添加了一個「ToList()」以強制查詢在變換之前執行。 – Khan

+0

非常好!現在我來解釋爲什麼dm1和dm2是空的:)謝謝你讓我在第一個障礙。 – faldeland

相關問題