Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mendapatkan Permintaan dengan Hanya Respons Berjaya Terkini Menggunakan NHibernate?

Bagaimana untuk Mendapatkan Permintaan dengan Hanya Respons Berjaya Terkini Menggunakan NHibernate?

Susan Sarandon
Lepaskan: 2025-01-15 10:20:44
asal
631 orang telah melayarinya

How to Retrieve Requests with Only the Latest Successful Response Using NHibernate?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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.
  • Pertanyaan utama kemudian menapis permintaan berdasarkan ketersediaan respons yang berjaya yang dikenal pasti dalam 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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan