Soal rujukan HasMany menggunakan NHibernate: Dapatkan semula permintaan dengan respons terkini yang berjaya
Artikel ini akan membimbing anda dalam membina pertanyaan yang mendapatkan semula semua permintaan yang jawapan terbaharunya (berdasarkan atribut cap waktu) berjaya.
Pertimbangkan model pepejal berikut:
<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>
Bangunan pertanyaan:
Untuk mendapatkan hasil yang diingini, kami boleh mencipta pertanyaan NHibernate QueryOver yang menggunakan subquery:
<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>
Arahan pertanyaan:
maxSubquery
Cari respons tarikh maksimum untuk setiap permintaan. successSubquery
Menapis respons untuk hanya memasukkan jawapan yang berjaya dan mempunyai tarikh maksimum untuk permintaan masing-masing. successSubquery
. Sebagai alternatif, pertimbangkan untuk menetapkan sifat "IsActive" pada respons untuk memudahkan pertanyaan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Permintaan dengan Hanya Respons Berjaya Terkini Menggunakan NHibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!