2012-07-25 48 views
0
var locations = (from location in session.Query<Location>()          
      where 
       (location.MB_ID == 0 || location.MB_ID == null) && 
       (location.hide != "Y" || location.hide == null) && 
       (location.locationNameRaw != "" && location.locationNameRaw != null) && 
       ((location.isIPCapableText != "" && location.isIPCapableText != null) || (
        (location.ISDNNumber1 != null && location.ISDNNumber1 != "") || 
        (location.ISDNNumber2 != null && location.ISDNNumber2 != "") || 
        (location.ISDNNumber3 != null && location.ISDNNumber3 != "") || 
        (location.ISDNNumber4 != null && location.ISDNNumber4 != "") || 
        (location.ISDNNumber5 != null && location.ISDNNumber5 != "") || 
        (location.ISDNNumber6 != null && location.ISDNNumber6 != "")           
       )) 
       && (location.privateRoom == "N" || location.privateRoom == "" || location.privateRoom != null) 
       && (
         from lll in session.Query<LocationLonLat>()            
         where 
          location.locationID == lll.locationId 
         select lll.locationId 
        ).Any() 
       && (location.LastUpdatedTime > lastUpdateTime) 
       && location.LocationTimes.Count() > 0 
       /*&& (
         from lt in session.Query<LocationTimes>() 
         where 
          location.locationID == lt.LID 
         select lt.LID 
        ).Any()*/ 
       select location 
       ) 
        .ToList(); 

Location(1)和LocationTimes(很多)之間有關係,我只想返回至少有一個LocationTime記錄的位置的數據集。Linq到nHibernate - 排除沒有子元素的元素

我試了幾件事情......

當我添加一行:

&& location.LocationTimes.Count() > 0 

,或者如果我添加一行:

&& (      
    from lt in session.Query<LocationTimes>() 
    where 
    location.locationID == lt.LID 
     select lt.LID 
    ).Any() 

基礎連接被關閉:服務器關閉了預期保持活動狀態的連接。

我懷疑這可能是因爲數據集或東西的大小...

是否有這樣做的更好的辦法?像「左外連接」或什麼的?

+0

爲什麼不使用locationTime連接位置?因爲您正在搜索位置時間位置的存在 – kalki 2012-07-25 09:53:56

回答

1

我認爲一個簡單的連接應該這樣做。

from locationTime in Query<LocationTime>() 
join location in Query<Location>() on locationTime.Location.LocationId equals location.LocationId 
join locationLat in Query<LocationLat>() on location.LocationLat.LocationLatId equals locationLat.LocationLatId 
where ... 
select location; 
+0

感謝您的回覆。我試過了,我仍然得到相同的錯誤。有任何想法嗎? – iKode 2012-07-25 10:51:54

+0

看不到爲什麼這樣一個基本上所有關於連接的簡單查詢都應該失敗,是否存在觸發連接丟失的基礎異常? – kalki 2012-07-25 11:04:55

+0

看來問題實際上不是由返回正常的查詢造成的。看起來它實際上只是拉一個更大的數據集或其他東西,因爲我現在收到的錯誤似乎是由WCF Web服務引起的。對困惑感到抱歉。 – iKode 2012-07-25 11:14:41