2012-07-25 50 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