NHibernate를 사용하여 HasMany 참조 쿼리: 최근 성공한 응답으로 요청 검색
이 문서에서는 최신 응답(타임스탬프 속성 기반)이 성공한 모든 요청을 검색하는 쿼리를 작성하는 방법을 안내합니다.
다음 솔리드 모델을 고려해보세요.
<code class="language-c#">public class Request { public virtual IList<Response> Responses { get; set; } } public class Response { public virtual DateTime Timestamp { get; set; } public virtual bool Success { get; set; } }</code>
쿼리 작성:
원하는 결과를 얻기 위해 하위 쿼리를 활용하는 NHibernate QueryOver 쿼리를 생성할 수 있습니다.
<code class="language-c#">// 响应子查询,查找最大日期响应 var maxSubquery = QueryOver.Of<Response>() .SelectList(l => l .SelectGroup(item => item.RequestId) .SelectMax(item => item.Timestamp)) .Where(item => item.RequestId == response.RequestId) .Where(Restrictions.EqProperty( Projections.Max<Response>(item => item.Timestamp), Projections.Property(() => response.Timestamp))); // 响应子查询,查找具有最大日期的成功响应 var successSubquery = QueryOver.Of<Response>()(() => response) .Select(res => res.RequestId) .WithSubquery .WhereExists(maxSubquery) .Where(success => success.Success == true); // 基于成功响应过滤的请求查询 var query = session.QueryOver<Request>(); query.WithSubquery .WhereProperty(r => r.ID) .In(successSubquery); var list = query .List<Request>();</code>
쿼리 지침:
maxSubquery
각 요청에 대한 최대 응답 날짜를 찾으세요. successSubquery
성공했고 해당 요청에 대한 최대 날짜가 있는 응답만 포함하도록 응답을 필터링합니다. successSubquery
에서 식별된 성공적인 응답의 가용성을 기준으로 요청을 필터링합니다. 또는 쿼리를 단순화하려면 응답에 "IsActive" 속성을 설정하는 것이 좋습니다.
위 내용은 NHibernate를 사용하여 최근에 성공한 응답으로만 요청을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!