2015-04-04 59 views
1

兩個不同的項目我想INNER JOIN語句寫出來。NHibernate - 內部加入不同會話(不同連接)

包括結果的第二次會議,但我不能讓

using (ISession session = Con1.OpenSessiongeneral()) 
{ 
    using (ISession session1 = Con2.OpenSessionsystem()) 
    { 
     result = (from s in session.Query<AU_SalesTarget>() 
       join t in session.Query<AU_Terms>() on s.termId equals t.termId 
       join b in session1.Query<Branchs>() on s.branchId equals b.branchId 
       select new SalesTarget_Derogate 
       { 
        salesTargetId = s.salesTargetId, 
        mounth = t.month, 
        year = t.year, 
        calculateMethod = s.calculateMethod, 
        branchName = b.branchName 
       }).Skip(0).Take(50).ToList<SalesTarget_Derogate>(); 
    } 
} 

列表返回null

+0

從diferent服務器的連接? – Najera 2015-04-26 19:08:38

回答

0

林不知道爲什麼你得到一個空列表,但如果你要使用存儲過程的SQL Server實例,支持不同實例之間的連接。

如果不支持,該解決方案是不優雅,你可以嘗試先獲取數據,然後使用LINQ加入他們這樣的:

using (ISession session = Con1.OpenSessiongeneral()) 
{ 
    result = (from s in session.Query<AU_SalesTarget>() 
     join t in session.Query<AU_Terms>() on s.termId equals t.termId 
      select new 
      { 
       salesTargetId = s.salesTargetId, 
       mounth = t.month, 
       year = t.year, 
       calculateMethod = s.calculateMethod, 
       branchId = s.branchId 
      }) 
     .Skip(0) 
     .Take(50) 
     .ToList(); 
} 

var branchIds = result.Select(x => x.branchId) 
    .List(); 
Branchs bAlias = null; 
IList<Branchs> branches = null; 

using (ISession session1 = Con2.OpenSessionsystem()) 
{ 
    branches = session1.QueryOver<Branchs> 
     .WhereRestrictionOn(x => x.branchId).IsIn(branchIds) 
     .Select(list => list 
      .Select(x => x.branchId).WithAlias(() => bAlias.branchId) 
      .Select(x => x.branchName).WithAlias(() => bAlias.branchName) 
     ) 
     .TransformUsing(Transformers.AliasToBean<Branchs>()) 
     .List<Branchs>(); 
} 

result = result.Join(branches, 
    x => x.branchId, 
    x => x.branchId, 
    (x, y) => new SalesTarget_Derogate 
    { 
     salesTargetId = x.salesTargetId, 
     mounth = x.month, 
     year = x.year, 
     calculateMethod = x.calculateMethod, 
     branchName = y.branchName 
    }).ToList(); 
相關問題