對HasMany引用的查詢我有一個這樣的實體模型: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; }}我想創(chuàng)造一個查詢那會給我所有請求最近反應(關(guān)于其時間戳)是成功..這是如何做到的呢?
3 回答

HUH函數(shù)
TA貢獻1836條經(jīng)驗 獲得超4個贊
// final Request selectionSELECT request.[RequestId] FROM [Request] request // Only requests, which are successful, and have Max(date) WHERE request.[RequestId] IN ( SELECT successResponse.RequestId as y0_ FROM [Response] successResponse // response which max date is equal to the upper response // and which RequestId corresponds with supper upper Request WHERE EXISTS ( SELECT maxResponse.RequestId as y0_ , max(maxResponse.[DateTime]) as y1_ FROM [Response] maxResponse // do the MAX only for current Request WHERE maxResponse.RequestId = successResponse.RequestId GROUP BY maxResponse.RequestId // assure that the Response match is on the max DateTime HAVING max(maxResponse.[DateTime]) = successResponse.[DateTime] ) AND successResponse.[Success] = 1 )
期待 反應 有
RequestId
上面用的是C# //
注釋而不是SQL --
// This declaration will allow us, to use a reference from middle SELECT// in the most deeper SELECTResponse response = null;// the most INNER SELECTvar maxSubquery = QueryOver.Of<Response>() .SelectList(l => l .SelectGroup(item => item.RequestId) .SelectMax(item => item.DateTime) ) // WHERE Clause .Where(item => item.RequestId == response.RequestId) // HAVING Clause .Where(Restrictions.EqProperty( Projections.Max<Response>(item => item.DateTime), Projections.Property(() => response.DateTime) ));// the middle SELECTvar successSubquery = QueryOver.Of<Response>(() => response) // to filter the Request .Select(res => res.RequestId) .WithSubquery .WhereExists(maxSubquery) // now only these wich are successful .Where(success => success.Success == true) ;
// the most outer SELECTvar query = session.QueryOver<Request>();query.WithSubquery // our Request ID is IN(... .WhereProperty(r => r.ID) .In(successSubquery);var list = query .List<Request>();

Cats萌萌
TA貢獻1805條經(jīng)驗 獲得超9個贊
Query
session.Query<Request>() .Where(request => request.Responses.Count() > 0 && request.Responses.OrderByDescending(response => response.Timestamp) .First() .Success);

慕碼人2483693
TA貢獻1860條經(jīng)驗 獲得超9個贊
SelectList
.Select()
- 3 回答
- 0 關(guān)注
- 641 瀏覽
添加回答
舉報
0/150
提交
取消