2012-07-25 4 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 (many) 사이에는 관계가 있으며 하나 이상의 LocationTime 레코드가있는 위치의 데이터 집합 만 반환하려고합니다.Linq to nHibernate - 하위 요소가없는 요소 제외

&& location.LocationTimes.Count() > 0 

내가 라인을 추가하는 경우 나 :

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

기본 연결이 닫혔습니다 내가 라인을 추가 할 때

나는 몇 가지를 시도

... : 연결 유지가 예상되는 연결은 서버에 의해 닫혔습니다.

나는이

가이 일을 더 나은 방법이 있나요 수 있기 때문에 ... 데이터 세트 또는 무언가의 크기 의심? '왼쪽 외부 조인'같은 거요?

+0

왜 locationTime과 결합 위치를 사용하지 않습니까? 귀하가 로케이션 타임즈가있는 위치를 찾고 있기 때문에 – kalki

답변

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

+0

기본적으로 조인에 대한 모든 간단한 쿼리가 실패해야하는 이유를 알 수 없으며 연결 손실을 유발하는 기본 예외가 있습니까? – kalki

+0

문제가 실제로 반환하는 쿼리에 의해 실제로 발생하지 않는 것 같습니다. 그것은 실제로 더 큰 databset 또는 무언가를 당기는 것 같습니다, 지금 받고있는 오류는 WCF 웹 서비스에 의해 야기 된 것 같습니다. 혼란을 드려 죄송합니다. – iKode

관련 문제